首先說明一下,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();
}
}
});
}