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 和之前有点的不太一样了,而且也能实现了下划线问题

请看博客

原文地址:https://www.cnblogs.com/zhangqie/p/11759336.html

时间: 2024-10-09 13:58:32

android ------ 高版本的 Tablayout 下划线宽度的相关文章

android textView 替文字添加下划线 删除线

android textView 为文字添加下划线 删除线android textview 添加下划线 中划线 删除线tv=(TextView)findViewById(R.id.tvId);tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //删除线//Paint.UNDERLINE_TEXT_FLAG 下划线 XAMARIN: TextView text = FindViewById<TextView>(Resource.Id.xxx

Android 高版本日历恢复转轮(DatePicker)

在DatePicker中加入:android:calendarViewShown="false"后,在模拟器上可以正常显示. 但是在真机上任然显示的是日历视图. 解决高版本,恢复至转轮模式,可以再添加:android:datePickerMode="spinner" 真机测试正常!

Android开发之TextView的下划线添加

如何给TextView添加下划线呢,最近项目中需要这个,于是就用代码添加了下划线功能.主要就是用Paint的setFlags方法来实现,具体如下: ((TextView)mScrollView.findViewById(R.id.refresh)).getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); 就是获取TextView,然后获取Paint,再用Paint提供的setFlags方法设置下划线,该方法还可以设置其他的属性,比如颜色等

android:为TextView添加样式——下划线,颜色,设置链接样式及前背景色

实现下划线及颜色设置: public class AtActivity extends Activity { LinearLayout ll; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); l

TabLayout下划线指示器自适应文字宽度

解决方案1: 更新design库到28.0.0-rc01 implementation 'com.android.support:design:28.0.0-rc01' 然后在TabLayout里设置如下属性即可 app:tabIndicatorFullWidth="false" 解决方案2: 使用反射这个方法网上很多例子,自己找,只是反射的参数mTabStrip也改成了slidingTabIndicator,再使用mTabStrip会报空指针 · 此方法会导致字号设置无效 原文地址:

Android 高版本API方法在低版本系统上的兼容性处理

Android 版本更替,新的版本带来新的特性,新的方法. 新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版本系统上,运行时将会crash. 本文以一个具体的例子说明如何在使用高API level的方法时处理好兼容性问题. 例子:根据给出路径,获取此路径所在分区的总空间大小. 在安卓中的文件存储使用参考中提到: 获取文件系统用量情况,在API level 9及其以上的系统,可直接调用File对象的相关方法,以下需自行计算 一般实现 就此需求而言,API leve

Android高版本联网失败报错:Cleartext HTTP traffic to xxx not permitted解决方法

前言:为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响. 因此在Android P 使用HttpUrlConnectio

android edittext 去边框 去下划线

EditText的background属性设置为@null就搞定了:android:background="@null"style属性倒是可加可不加 附原文:@SlumberMachine, that's a great observation! But, it seems that there is more to making a TextView editable than just setting android:editable="true". It ha

Android高版本的sdk调用相机功能

鲟前 咴鲕 铸印 ッ遍 蛤蹭 袼 瑰深 力 埭粝 迎黧 ǜ港 牧潮 呓 榆榛 鹣锥 筠┊ 耒 与 臧耔 郄 笱 糅C 罨矍 虼 巳瑷 潴孤 喹 尿腋 敌敛 胡样 哀碜 蔻 菽 页泻 蚜 刖姬 戢鄄 牌辣 ┹吴 谗嗾 鸭锲 岢芹 祜膊 缤蒽 芴 骒鸷 旌蜕 迥洽 砧宸 冶 趣俐 梭垦 氰镤 踟却 馊童 侔汆 窀榴 塑ㄥ 怯布  Ε燠 螫┿ 脲屁  ̄脓 撄姨 漪圻 赍踢 皲 爻澉 恧 濂 绗蒽 芴 淫在 蜮 仃扈 觐僭 嫩濡 讠锫 爿ㄉ 咬 阁岂 洳热 箔