TabLayout的Indicator自定义宽度
设计图如下:
方法一 XML设置Indicator的宽度
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:width="12dp"android:height="3dp"android:gravity="center_horizontal"><shape><solid android:color="@color/white" /></shape></item>
</layer-list>
不过有API要求23起,不过我们最低target是21,不管了。
如果实在要兼容更低版本,可以定义一个默认的xml和一个v23的xml来实现对低版本的兼容,低版本由于没有height和width,考虑设置left和right来达到对indicator宽度的限制。
例如:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:left="25dp"android:right="25dp"android:gravity="center_horizontal"><shape><solid android:color="@color/white" /></shape></item>
</layer-list>
使用:app:tabIndicator="@drawable/tab_indicator"
方法二 反射设置Indicator宽度
internal class TabIndicatorRectF(private val indicatorBoundsModifier: IndicatorBoundsModifier) : RectF(), Serializable {private val temp: RectF = RectF()interface IndicatorBoundsModifier {fun modify(bounds: RectF?)}override fun set(left: Float, top: Float, right: Float, bottom: Float) {temp.set(left, top, right, bottom)indicatorBoundsModifier.modify(temp)super.set(temp)}fun replaceBoundsRectF(tabLayout: TabLayout?) {try {val field: Field = TabLayout::class.java.getDeclaredField("tabViewContentBounds")field.isAccessible = truefield.set(tabLayout, this)} catch (e: NoSuchFieldException) {e.printStackTrace()} catch (e: IllegalAccessException) {e.printStackTrace()}}class FixedWidthModifier(width: Float) : IndicatorBoundsModifier {private val halfWidth = abs(width) / 2override fun modify(bounds: RectF?) {bounds?.centerX()?.let {bounds.left = it - halfWidthbounds.right = it + halfWidth}}}
}
调用:
TabIndicatorRectF(TabIndicatorRectF.FixedWidthModifier(DisplayUtil.dip2px(12f))).replaceBoundsRectF(toolbarFuncBinding.tabLayout)
方法三 使用第三方库实现:MageicIndictor
方法四:自定义Indictor
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><item android:gravity="center"><shape><sizeandroid:width="12dp"android:height="4dp" /><solid android:color="@color/color_333" /></shape></item></layer-list>
<com.google.android.material.tabs.TabLayoutandroid:id="@+id/tab_layout"android:layout_width="match_parent"android:layout_height="40dp"app:tabIndicatorFullWidth="false"app:tabMode="fixed"app:tabIndicatorGravity="bottom"app:tabGravity="center"app:tabIndicator="@drawable/tab_indicator_black"app:tabIndicatorColor="@color/color_333"/>
所以我采用的是方法四,本来想考虑方法三点,但是项目没有引用到MagicIndictor,所以就不考虑了。
部分参考自:https://cloud.tencent.com/developer/article/1460300
TabLayout的Indicator自定义宽度相关推荐
- [Android]Tablayout:修改指示器indicator的宽度
一.问题描述: 最近接触到了Tablayout,需求是要把Tablayout的下划线宽度缩短,或者说使其可以进行自定宽度. 百度上面大多数利用反射,(具体可百度查询),这种方法确实可以把下划线变短,但 ...
- ViewPager Indicator 自定义标题和指示器样式
ViewPager Indicator 自定义标题和指示器样式 Indicator 自定义样式 可支持自定义内容 使用方式 1.xml中直接引用 2.绑定ViewPager 3.自定义样式实现和修改 ...
- TabLayout设置指示器的宽度
TabLayout的指示器的高度.颜色都可以设置,但是宽度需要自己来实现 在TabLayout view初始化后,设置 /** * @date:2017/11/9/009 * @author:平sir ...
- vue table使用colgroup进行表格自定义宽度
vue table使用colgroup进行表格自定义宽度 在默认情况下table表格的宽度是根据表格内容进行分配的 想自定义宽度可以通过colgroup标签配合col标签设置: col的个数与表格的列 ...
- 一个工具类实现自定义Tablayout的下划线宽度
** 只改变Tablayout的下划线的宽度,只需要一个工具类就可以可满足** 1.写个工具类 封装: /*** @author FX* @date 2018/07/19 11:11* @fuctio ...
- zxing生成边框自定义宽度二维码,
1.基本方法 //二维码容错率,分四个等级:H.L .M. Q ErrorCorrectionLevel level = ErrorCorrectionLevel.H; String qrName = ...
- 自定义FlowLayout控件实现自定义宽度并换行
最近的需求是实现添加购物车页面,展示规格的时候会出现显示不全,数据会自动剪切掉,后边重新自定义了FlowLayout问题得到解决,下面直接上代码 public class FlowLayoutView ...
- 仿掌阅实现 TabLayout 切换时的字体和 Indicator 动画
文章目录 前言 分析 实现字体缩放动画 实现 Indicator 的长度变化动画 一.准备工作 二.让 TextView 撑满 TabView 三.实现滑动时 Indicator 的动画效果 写在最后 ...
- [Android] TabLayout设置下划线(Indicator)宽度
在使用TabLayout的过程中,为每个标签添加一个 下划线,但发现每个下划线的 宽度 都是一样的,例如会如下显示 这样很难看,所以必须进行调整后的效果如下: 看,这样不是非常和谐啦!~~ 实现方法很 ...
- 自定义TabLayout
前言 系统自带的Tablayout用的也不错但是有些功能还不能满足我们这边开发,所以我这边自定义了一个tablayout提供了自定义tab线的长度以及,移动速度,以及禁止某个滑动(tablayout基 ...
最新文章
- mysql里条件语句和循环语句_MySQL与Oracle 差异比较之四条件循环语句
- java volatile 多线程,java多线程-volatile的使用
- via浏览器下载路径_Via - 能够安装脚本插件的安卓浏览器
- Mestasploit 客户端渗透
- [Ynoi2018]末日时在做什么?有没有空?可以来拯救吗?
- 不愿意和别人打交道_最不愿与陌生人打交道的星座
- python安装scipy出现红字_windows下安装numpy,scipy遇到的问题总结
- [转载] python3 opencv 图像二值化笔记(cv2.adaptiveThreshold)
- 数据预处理—3.变量选择之逐步挑选—向前挑选、向后挑选、双向挑选python实现
- python离线录音转文字软件_有能把录音变成文字的软件么?
- 一键采集淘宝店铺装修模板图
- Please change your current directory to a writable directory outside of the MATLAB installation area
- linux中man手册用法,Linux中man手册的使用
- Hbase——练习4
- 在线计算机励志文案,21句让人心动的励志文案,振奋人心,激励满满!
- Python3+Scrapy通过代理爬取携程酒店数据
- 微软发布命令行神器,文件误删秒恢复
- android 图片方法,分享实现Android图片选择的两种方式
- ABM410-ASEMI贴片整流桥ABM410
- 萌新必看——10种客户端存储哪家强,一文读尽!
热门文章
- 牛客小白月赛21 I题
- Ajax中readyState和status
- 第四届橙瓜网络文学奖20年十佳言情大神天下归元暂时排第三名
- 高等数学(第七版)同济大学 习题7-4 个人解答
- 冲击港交所:百果园书写水果连锁运营默示录
- 谷歌colab平台简单使用及读取自己的数据集
- git push出现 remote: Support for password authentication was removed on August 13, 2021.
- 中国混合现实产业调研分析及发展战略研究报告2021-2027年版
- Linux 工具链 error while loading shared libraries: libgettextsrc-0.19.8.1.so 解决方法
- makefile写法整理