美文网首页
TabLayout如何设置下划线(Indicator)宽度

TabLayout如何设置下划线(Indicator)宽度

作者: 冬瓜去哪儿 | 来源:发表于2018-07-27 19:52 被阅读0次

```

public void reflex(final TabLayout tabLayout){

//了解源码得知 线的宽度是根据 tabView的宽度来设置的

        tabLayout.post(new Runnable() {

@Override

            public void run() {

try {

//拿到tabLayout的mTabStrip属性

                    LinearLayout mTabStrip = (LinearLayout)tabLayout.getChildAt(0);

                    int dp10 =dip2px(tabLayout.getContext(), 10);

                    for (int i =0; i < mTabStrip.getChildCount(); i++) {

View tabView = mTabStrip.getChildAt(i);

                        //拿到tabView的mTextView属性  tab的字数不固定一定用反射取mTextView

                        Field mTextViewField = tabView.getClass().getDeclaredField("mTextView");

                        mTextViewField.setAccessible(true);

                        TextView mTextView = (TextView) mTextViewField.get(tabView);

                        tabView.setPadding(0, 0, 0, 0);

                        //因为我想要的效果是  字多宽线就多宽,所以测量mTextView的宽度

                       int tabWidth =0;

                        tabWidth = tabView.getWidth();

                        if (tabWidth ==0) {

tabView.measure(0, 0);

                            tabWidth = mTextView.getMeasuredWidth();

                        }

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams();

                        int margin = (tabWidth - mTextView.getWidth()) /2;

                        params.leftMargin = margin;

                        params.rightMargin = margin;

                        tabView.setLayoutParams(params);

                        tabView.invalidate();

                    }

}catch (NoSuchFieldException e) {

e.printStackTrace();

                }catch (IllegalAccessException e) {

e.printStackTrace();

                }

}

});

    }

```


相关文章

网友评论

      本文标题:TabLayout如何设置下划线(Indicator)宽度

      本文链接:https://www.haomeiwen.com/subject/kuogmftx.html