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

请看博客

最新文章

  1. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
  2. 使用BitArray判断素数
  3. 使用Fragment创建灵活的用户界面
  4. 没听说过这些,就不要说你懂并发了,three。
  5. php编译内容
  6. 通过HttpWebRequest请求与HttpWebResponse响应方式发布接口与访问接口
  7. Material Design练习
  8. NSTimer scheduledTimerWithTimeInterval与timerWithTimeInterval、initWithFireDate的区别
  9. HttpResponse的Close和End 区别
  10. SQLite函数详解之二
  11. NFC(4)响应NFC设备时启动activity的四重过滤机制
  12. MailOtto 实现完美预加载以及源码解读
  13. 关于android:configChanges的属性
  14. UniqueID和ClientID的来源
  15. Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项
  16. js Array 学习
  17. HDU1848-Fibonacci again and again
  18. Rigidbody(刚体) and Collider(碰撞器)
  19. 道路 [NOIP模拟]
  20. XML5个转义符:&lt;,&gt;,&amp;,”,&#169;;的转义字符分别如下: &amp;lt; &amp;gt;&amp;amp; &amp;quot; &amp;apos;

热门文章

  1. ZooKeeper基本介绍
  2. 设计模式 结构型 - 适配器模式 Adapter
  3. NIO与网络编程系统化学习
  4. Spring+SpringMVC+Hibernate 与 shiro 整合步骤
  5. 第十一周LINUX 学习笔记
  6. flask 源码浅析(flask 如何处理请求(多线程,多进程,IO多路复用))
  7. 图论篇2——最小生成树算法(kurskal算法&amp;prim算法)
  8. 伪分布式下Hadoop3.0打不开localhost:50070
  9. c#中的解析HTML组件 -- (HtmlAgilityPack,Jumony,ScrapySharp,NSoup,Fizzler)
  10. Intellij IDEA如何生成JavaDoc