android ------ 高版本的 Tablayout 下划线宽度

Posted 切切歆语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android ------ 高版本的 Tablayout 下划线宽度相关的知识,希望对你有一定的参考价值。

前面呢,有写过TabLayout的博客,最近开发用到了高本版遇到一些问题,来总结一下

Android--------TabLayout实现新闻客户端顶部导航栏

Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换

 

 

上面是Api28版本之前是没问题的 api28之后呢,有些地方就有所改变了

 

public static void reflex(final TabLayout tabLayout){
        tabLayout.post(() -> {
            try {
                //拿到tabLayout的slidingTabIndicator属性
                Field tabIndicator = tabLayout.getClass().getDeclaredField("slidingTabIndicator");
                //API28以下为mTabStrip
//              Field tabIndicator = tabLayout.getClass().getDeclaredField("mTabStrip");
                tabIndicator.setAccessible(true);
                LinearLayout mTabStrip = (LinearLayout) tabIndicator.get(tabLayout);
                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("textView");
                    //API28以下为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 这个间距可根据自己需求更改
                    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams();
                    params.width = width ;
                    params.leftMargin = dp10;
                    params.rightMargin = dp10;
                    tabView.setLayoutParams(params);
                    tabView.invalidate();
                }

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

    }

 

当然这种方式啊我其实不是很推荐,我在网上也看到一些网友说设置了没效果

 

所以我用了androidX 之后发现了他里面的Tablayout 和之前有点的不太一样了,而且也能实现了下划线问题

 

请看博客 

 

以上是关于android ------ 高版本的 Tablayout 下划线宽度的主要内容,如果未能解决你的问题,请参考以下文章

sql Ejemplodeactualizacióndeun campo de un tabla tomando el valor de un campo de una tabla dife

android系统比较低,能不能装高版本软件,

android高版本程序能在低版android系统上运行吗?

text crear tabla temporal

javascript deshabilitar boton tabla insertatabla

vbscript 插入一个tabla con hijos