tablayout更改下划线宽高

               
tabs.post(new Runnable() { 
@Override 
public void run() { 
try { 
                //拿到tabLayout的mTabStrip属性 
                Field mTabStripField = tabs.getClass().getDeclaredField(“mTabStrip”); 
                mTabStripField.setAccessible(true);
                int dp10 = UIUtils.dip2px( 10);

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

                    //拿到tabView的mTextView属性
                    Field mTextViewField =                                        
 tabView.getClass().getDeclaredField("mTextView");
                    mTextViewField.setAccessible(true);

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

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

                    //因为我想要的效果是   字多宽线就多宽,所以测量mTextView的宽度
                    int width = 0;
                    width = mTextView.getWidth();
                    if (width == 0) {
                        mTextView.measure(0, 0);
                        width = mTextView.getMeasuredWidth();
                    }

                    //设置tab左右间距为10dp  注意这里不能使用Padding 因为源码中线的宽度是根据 tabView的宽度来设置的
                    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)             tabView.getLayoutParams();
                    params.width = width ;
                    //设置高度
                   // params.width = height;
                    params.leftMargin = dp10;
                    params.rightMargin = dp10;
                    tabView.setLayoutParams(params);

                    tabView.invalidate();
                }

            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

        }});

猜你喜欢

转载自blog.csdn.net/Lin_XiJun/article/details/88528975