public static void setTabLayoutWidth(int left, int right, TabLayout tabLayout, Activity Activity) {    try {        Field slidingTabIndicatorField;        Field textViewField;        // 拿到tabLayout的slidingTabIndicator属性        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {            slidingTabIndicatorField = tabLayout.getClass().getDeclaredField("slidingTabIndicator");        } else {            slidingTabIndicatorField = tabLayout.getClass().getDeclaredField("mTabStrip");        }        slidingTabIndicatorField.setAccessible(true);        LinearLayout mTabStrip = (LinearLayout) slidingTabIndicatorField.get(tabLayout);        for (int i = 0; i < mTabStrip.getChildCount(); i++) {            View tabView = mTabStrip.getChildAt(i);            //拿到tabView的mTextView属性            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {                textViewField = tabView.getClass().getDeclaredField("textView");            } else {                textViewField = tabLayout.getClass().getDeclaredField("mTextView");            }            textViewField.setAccessible(true);            TextView mTextView = (TextView) textViewField.get(tabView);            tabView.setPadding(0, 0, 0, 0);            // 因为想要的效果是字多宽线就多宽,所以测量mTextView的宽度            int width = mTextView.getWidth();            if (width == 0) {                mTextView.measure(0, 0);                width = mTextView.getMeasuredWidth();            }            // 设置tab左右间距,注意这里不能使用Padding,因为源码中线的宽度是根据tabView的宽度来设置的            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams();            params.width = width;            params.leftMargin = left;            params.rightMargin = right;            tabView.setLayoutParams(params);            tabView.invalidate();        }    } catch (NoSuchFieldException e) {        e.printStackTrace();    } catch (IllegalAccessException e) {        e.printStackTrace();    }}
app:tabIndicatorFullWidth="false"设置为false 就是指示线跟tabitem的文字一样宽 

要设置为true 才能设置上边的才有效

有同学肯定好奇为啥上边还有版本判断

因为sdk大于等于28 是 slidingTabIndicator这个 小于的就是  mTabStrip  因为sdk版本都有差异 找不到的话 就会 Exception

然后就尴尬了

如果这个不能满足你的需求  建议看下这个TabLayout

传送门

这是根据我日常遇到的问题分享出来 希望能解决各位同学的问题 不许勿喷!白白

 

更多相关文章

  1. android webview设置自适应任意大小的pc网页
  2. Android(安卓)去掉title bar的3个方法
  3. android 应用程序 集合
  4. API 25 (Android(安卓)7.1.1 API) widget.ProgressBar——属性分
  5. Android中设置全屏的方法
  6. android之渐变色背景
  7. Android(安卓)跳转+两种ListView+ListheaderView
  8. android 横屏 竖屏 全屏 当前屏幕宽 高
  9. android:layout_weight android:weightSum

随机推荐

  1. Android的logcat用法
  2. Android(安卓)Studio中Xml的新建及shape
  3. ant script to obfuscate android code
  4. Android中的动画详解系列【2】——飞舞的
  5. Android(安卓)ListView理解
  6. Android(安卓)中LayoutInflater(布局加载
  7. Android轻便易用的文件选择器ExFilePicke
  8. Android两行代码真正杀死你的App
  9. Android中解析XML
  10. 解决TextView设置跑马灯但却没有效果