欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();
                }
            }
        });
    }