Android TabLayout 设置Indicator 圆角样式和宽度几种方式

写在前面:本文仅个人开发时遇到的问题及个人解决办法的记录。

项目编译版本:buildToolsVersion:"30.0.1"

新项目有使用到com.google.android.material下的TabLayout,在设计师的设计稿中,TabLayout的Indicator是固定长度的,而且比每个Tab的长度还要短,因此找了很多博客看,总结大概就是几种方法。

一、使用反射修改,这里就不贴代码了,百度和Google搜索一大堆。

        使用反射这里不能说它有问题,因为在很多系统版本的手机都能使用。但是在29及以上的系统中,谷歌对反射的使用就限制比较严格,而且在28版本的时候还对内部的方法名修改过一次。通过反射虽然可以实现,但我个人觉得反射不够优雅,并且它有可能因为 SDK 的升级而失效。但这不失为当前解决这个问题的一个方法。

二、自定义 Tab

        TabLayout 中的 Tab 是允许自定义的,但 Indicator 不属于 Tab。所以有这样一种解决方案,把 Indicator 隐藏掉,然后在自定义 Tab 的布局中加入指示线。我们可以通过把 Indicator 的颜色设为透明来隐藏它:

app:tabIndicatorColor="@android:color/transparent"

而自定义Tab就是由于在Tab中有这样一个方法:tab.setCustomView();我们只需要自定义一个布局,在布局里面添加指示器,

然后可以使用这两种方式:

tab.setCustomView(view);

或者 tab.setCustomView(R.layout.home_bottom_button);把布局传递给Tab,然后在

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){})方法的listener中控制指示器显示和隐藏(OnTabSelectedListener有三个方法)

但是这样用的话就没有滑动切换的动画效果。

三、使用 Drawable 样式(使用华为手机SDK为28的可以,19的模拟器不可以)

        我自己使用的是这种方式。简单省事,还没那么麻烦。

  具体的借鉴参考了这篇文章:https://blog.csdn.net/u011106915/article/details/106116711    

提示:要把下面两个都设置上,而且drawable中的颜色和下面设置的颜色要一致。不然有可能部分手机会无效或者下面设置的tabIndicatorColor覆盖上面Drawable中的颜色

app:tabIndicator="@drawable/life_home_tab_indicator"

app:tabIndicatorColor="#ff080808"

你可能感兴趣的:(Android TabLayout 设置Indicator 圆角样式和宽度几种方式)