改变TabLayout下划线的长度

思想:运用反射的方式来实现

封装的方法如下:


  public voidsetIndicator(TabLayout tabs, intleftDip, intrightDip) {
    Class tabLayout = tabs.getClass();
    Field tabStrip =null;
    try{
        tabStrip = tabLayout.getDeclaredField("mTabStrip");
    }catch(NoSuchFieldException e) {
        e.printStackTrace();
    }
    tabStrip.setAccessible(true);
    LinearLayout llTab =null;
    try{
        llTab = (LinearLayout) tabStrip.get(tabs);
    }catch(IllegalAccessException e) {
        e.printStackTrace();
    }

    intleft = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,leftDip,Resources.getSystem().getDisplayMetrics());
    intright = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,rightDip,Resources.getSystem().getDisplayMetrics());

    for(inti =0;i < llTab.getChildCount();i++) {
          View child = llTab.getChildAt(i);
          child.setPadding(0,0,0,0);
          LinearLayout.LayoutParams params =newLinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT,1);
          params.leftMargin= left;
          params.rightMargin= right;
          child.setLayoutParams(params);
          child.invalidate();
      }
    }

在tablayout渲染完成之后调用

tabLayout.post(newRunnable() {
@Override
public voidrun() {
setIndicator(tabLayout,40,40);
}
});

    原文作者:w启
    原文地址: https://www.jianshu.com/p/d71c76f0e5b5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞