TabLayout更改下划线长度和内容保持一致

来源:互联网 发布:水平很高的网络词 编辑:程序博客网 时间:2024/06/18 13:21

先上效果图修改后修改前

主要是通过反射强制修改每个子Tab的左右边距,代码很简单,一看就明了

下面献上代码

 public void setTabLine(TabLayout tab,int left,int right){    try {        Class<?> tablayout = tab.getClass();        Field tabStrip = tablayout.getDeclaredField("mTabStrip");        tabStrip.setAccessible(true);        LinearLayout ll_tab= (LinearLayout) tabStrip.get(tabLayout);        for (int i = 0; i < ll_tab.getChildCount(); i++) {            View child = ll_tab.getChildAt(i);            child.setPadding(0,0,0,0);            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT,1);            //修改两个tab的间距            params.setMarginStart(BasicUtils.dip2px(context,left));            params.setMarginEnd(BasicUtils.dip2px(context,right));            child.setLayoutParams(params);            child.invalidate();        }    } catch (NoSuchFieldException e) {        e.printStackTrace();        Log.e(TAG,e.toString());    } catch (IllegalAccessException e) {        e.printStackTrace();        Log.e(TAG,e.toString());    }}

注意1:Tablayout的Mode必须得设置为fixed,否则会滑动
示例:app:tabMode=”fixed”

注意2:Tablayout的宽不能写死,得设置为包裹内容

阅读全文
0 0
原创粉丝点击