注:使用新的属性需要设置implementation 'com.android.support:design:28.0.0'

在布局里加入 TabLayout,默认是下划线的样式,可以使用 tabIndicatorGravity 属性设置为:bottom(默认值,可以不用设置,指示器显示在底部)、 top(指示器显示在顶部)、center(指示器显示在中间)、stretch(指示器高度拉伸铺满 item)。

android:id="@+id/tl"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:tabIndicatorColor="@color/colorPrimary"

app:tabIndicatorFullWidth="true"

app:tabIndicatorHeight="2dp"

app:tabMode="scrollable" />

1. "app:tabIndicatorFullWidth" 属性

注意 app:tabIndicatorFullWidth="true" 属性,设为 true,是 Indicator 充满 item 的宽度:

app:tabIndicatorFullWidth="true"

设为 false 是 Indicator 保持和 item 的内容宽度一致:

app:tabIndicatorFullWidth="false"

2. 给 Indicator 设置边距

不过我觉得可以使用 layer-list 来实现。

在 drawable 文件夹下新建一个 indicator.xml 文件:

android:left="15dp"

android:right="15dp">

需要注意的是在 shape 里设置颜色是无效的,需要在布局文件里设置 Indicator 颜色。

在 TabLayout 布局里添加 Indicator 的样式:

android:id="@+id/tl"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:tabIndicatorHeight="2dp"

app:tabIndicatorColor="@color/colorPrimary"

app:tabIndicator="@drawable/indicator"

app:tabMode="scrollable" />

设置app:tabIndicator

3. 给 Indicator 设置圆角

如果不需要边距,只需要圆角,可以配合 app:tabIndicatorFullWidth 属性,使用 shape 设置 app:tabIndicator 来实现圆角即可,无需使用 layer-list,代码就不用贴了吧~

这里为了使效果看得明显一点,把 Indicator 的高度设置为 5dp。

给 Indicator 添加了 5dp 的圆角:

android:left="15dp"

android:right="15dp">

带圆角的下划线

4. 给 Indicator 设置宽高

4.1 在 的 标签里设置宽高:

android:width="20dp"

android:height="5dp" />

4.2 在 API 23 以上,支持直接在 layer-list 里给 标签设置宽度和高度:

android:width="20dp"

android:height="5dp"

android:gravity="center_horizontal">

在这里插入图片描述

5. tabIndicator 属性源码分析

TabLayout 的 tabIndicator 属性里设置的 layer-list 不支持设置颜色。

我们查看一下 TabLayout 的源码,搜索 TabLayout_tabIndicator:

this.setSelectedTabIndicator(MaterialResources.getDrawable(context, a, styleable.TabLayout_tabIndicator));

setSelectedTabIndicator() 方法:

setSelectedTabIndicator()

搜索一下使用 tabSelectedIndicator 的地方,在 SlidingTabIndicator 类里的 draw() 方法里:

第 1 处 tabSelectedIndicator

在这里插入图片描述

再看一下 selectedIndicatorHeight 是什么:

在这里插入图片描述

在这里插入图片描述

selectedIndicatorHeight 是在布局里给 TabLayout 设置的 tabIndicatorHeight 属性。

可见如果我们在布局里给 TabLayout 设置了 tabIndicatorHeight 属性,则 Indicator 高度优先取 tabIndicatorHeight 设置的高度;否则才会取咱们自定义的 drawable 里的高度。

继续,第 2 处 tabSelectedIndicator

在这里插入图片描述

黄色方框里可以发现,为什么之前在 drawable 里设置的颜色无效了,因为使用的是 TabLayout_tabIndicatorColor 属性里设置的颜色,所以 也无效,只保留了整体的形状样式。

6. 自定义复杂的 Indicator 样式

如果需要复杂一点的样式,比如 。

先写一个 tab 被选中时的样式 indicator.xml:

android:bottom="8dp"

android:left="8dp"

android:right="8dp"

android:top="8dp">

android:width="1dp"

android:color="@color/colorAccent" />

还需要一个 selector.xml:

接下来,我们要设置的是 tabBackground,也就是 tab 标签的背景,而不再是tabIndicator,所以要把 Indicator 的高度设为 0 ,不使用 tab 原生的 Indicator。

这里还要注意一下 tabRippleColor 属性,是设置点击 tab 标签时的波纹颜色,不设置的时候,默认是灰色的,文章前面的截图里有显示效果。如果想去掉这个效果,设置颜色为透明即可。

android:id="@+id/tl"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:tabBackground="@drawable/selector"

app:tabIndicatorHeight="0dp"

app:tabMode="scrollable"

app:tabRippleColor="@android:color/transparent" />

在这里插入图片描述

想实现更复杂的效果,可以使用 MagicIndicator

附上一个效果图,感觉还是很酷炫的:

在这里插入图片描述

android 自定义indicator,【Android】TabLayout 自定义指示器 Indicator 样式相关推荐

  1. Android自定义控件之RecyclerView打造万能ViewPager TabLayout(仿今日头条Tab滑动、Tab多布局、indicator蠕动、自定义indicator、文字颜色渐变)

    文章目录 GitHub:https://github.com/AnJiaoDe/TabLayoutNiubility 该轮子特异功能如下: 使用方法 注意:该轮子适用于androidx中的ViewPa ...

  2. [Android]Tablayout:修改指示器indicator的宽度

    一.问题描述: 最近接触到了Tablayout,需求是要把Tablayout的下划线宽度缩短,或者说使其可以进行自定宽度. 百度上面大多数利用反射,(具体可百度查询),这种方法确实可以把下划线变短,但 ...

  3. android tablayout 自定义,TabLayout用法详解及自定义样式

    TabLayout的默认样式: app:theme="@style/Widget.Design.TabLayout" 从系统定义的该样式继续深入: fill fixed 264dp ...

  4. Android TabLayout自定义指示器之三角形效果实现

    效果图如下 ScanToPayActivity布局 <android.support.constraint.ConstraintLayoutxmlns:android="http:// ...

  5. android tablayout 自定义,TabLayout的自定义

    TabLayout的自定义,主要是通过setCustomView方法来添加自定义布局实现. 自定义TabLayout的实现主要包含以下几个步骤 ●创建自定义布局(这里我加了一个动画控件,可以替换成其他 ...

  6. Android TabLayout修改指示器宽度方案汇总

    目录 前言 TabLayout的视图结构 TabLayout绘制指示器的过程 1.从获取tabSelectedIndicator边界着手 1.1 默认情况下的指示器宽度 1.2 tabIndicato ...

  7. 二、TabLayout自定义图片指示器

    最近项目需求,多个tab切换显示不同的页面,但是tab的下划线是一个带有圆角阴影的下划线,看过Tablayout源码的小伙伴可能会知道,通过原生的TabLayout是无法实现的,想了解的可以看我的另一 ...

  8. android 自定义banner,Android项目 引入Banner开源库(轮播图)

    Banner开源库是什么? Banner 是 Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义. 怎么使用 Banner 开源库? 1.在项目\a ...

  9. Android键盘自定义表情包,关于自定义表情键盘...

    在做输入的时候,除了可以输入系统的表情符号,项目中通常还要求输入表情图片 表情图片 1.正则表达式 一个正则表达式,就是一串有特定意义的字符,首先要编译成为一个Pattern对象,然后使用matche ...

  10. TabLayout自定义指示器及样式

    一,自定义指示器下标 效果图如下: 1,新建一个名为:layer_tab_indicator的layer-list文件,然后定义想要的样式,其中bitmap 设置成需要的图片格式,也可以根据需求在it ...

最新文章

  1. a prefect storm歌词_Storm s Perfect Storm歌词
  2. 透过现象看本质,图解支持向量机
  3. Sublime Text 常用插件和快捷键
  4. 2021年春季学期-信号与系统-第十次作业参考答案-第二小题
  5. 10.ASCII码对照
  6. Excel 常见公式
  7. 10、mysql数据表中数据的查询(2)
  8. php新特性:trait 关键字使用
  9. 先收藏!关于Java类、接口、枚举的知识点大汇总
  10. hdu 5584 gcd/lcm/数学公式
  11. 关于myeclipise注册机run.bat运行失败的解决方法
  12. 未来教育计算机vb二级,2019年3月计算机二级VB考试巩固试题及答案020
  13. RubyOnRails培训大纲
  14. 炼数成金 mysql_MySQL DBA从小白到大神实战 MySQL运维DBA课程 炼数成金MySQL企业运维视频教程...
  15. SX1278超时设置与计算
  16. Unity TileMap 2D 工具基础教程
  17. yocto下的cmake版本hello world,追加分层使用
  18. 如何激活预装的office
  19. 计算机网络常见协议英文全称
  20. bean login not found within scope

热门文章

  1. 数据库的系统组成包括哪些?
  2. C语言程序设计(2020)编程题答案——第14章结构体、共用体和用户定义类型
  3. TCP/IP路由技术第一卷动态路由知识回顾
  4. 解决W5500,DHCP获取IP地址失败的问题,移植官方例程需要特别注意!!!
  5. IO流案例:字符串反转
  6. 游戏建模:21个人脑壳雕刻小小技巧,非常有用!
  7. 外显子名词解释_生物信息学常用名词解释(四)
  8. 依图芯片服务器,依图推出云端AI芯片,1台机柜支撑起万路智能视频解析
  9. Diffie-Hellman协议中间人攻击方法及协议改进(网络空间安全实践与设计)
  10. matlab根据火焰RGB值求温度程序,基于MATLAB的炉膛火焰图像温度测量