TabLayout 中item設置寬度 API28以上

首先說明一下,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();
                }
            }
        });
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章