TabLayout 中item设置宽度 API28以上
程序员文章站
2024-03-17 09:09:46
...
首先说明一下,TabLayout 中如果只用一个item的时候,此时设置是不起作用,原因我也没查,估计是源码底层做了限制
<!--tabIndicatorColor 底下标签的颜色值-->
<!--tabSelectedTextColor 选中时的文字的颜色-->
<!--tabBackground 整个item的背景-->
<!--tabTextColor 默认item文字的颜色-->
<!--tabTextAppearance 指定 文字的大小-->
<!-- 设置TabLayout 文字的大小-->
<style name="TabLayoutTextStyle">
<item name="android:textSize">14sp</item>
</style>
<com.google.android.material.tabs.TabLayout
android:layout_width="match_parent"
android:id="@+id/tabLayout"
app:tabIndicatorColor="@color/text_press" //
app:tabSelectedTextColor="@color/text_press"
app:tabBackground="@color/mid_blue"
app:tabTextColor="@color/white"
app:tabTextAppearance="@style/TabLayoutTextStyle"
app:tabMode="scrollable"
android:visibility="gone"
android:layout_height="40dp">
</com.google.android.material.tabs.TabLayout>
通过代码反射修改item的宽度
public void setLayoutWidth(){
tabLayout.post(new Runnable() {
@Override
public void run() {
// 拿到tabLayout的slidingTabIndicator属性
try {
Field slidingTabIndicatorField = tabLayout.getClass().getDeclaredField("slidingTabIndicator");
slidingTabIndicatorField.setAccessible(true);
LinearLayout mTabStrip = (LinearLayout) slidingTabIndicatorField.get(tabLayout);
Log.i("tabLayout", mTabStrip.getChildCount() +" --");
for (int i = 0; i < mTabStrip.getChildCount(); i++) {
View tabView = mTabStrip.getChildAt(i);
// 拿到tabview的textview属性
Field textViewField = tabView.getClass().getDeclaredField("textView");
textViewField.setAccessible(true);
TextView mTextView = (TextView) textViewField.get(tabView);
tabView.setPadding(0, 0, 0, 0);
// int width = mTextView.getWidth();
// if (width == 0) {
// mTextView.measure(0, 0);
// width = mTextView.getMeasuredWidth();
// }
// 控制Item条目的宽度,这种设置的话就是等分
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) tabView.getLayoutParams();
layoutParams.width = 0;
layoutParams.weight = 1;
tabView.setLayoutParams(layoutParams);
tabView.invalidate();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}