Android TabLayout基本使用及完美调整指示器位置的技巧
在应用中,我们经常遇到多个页签切换的需求,这个时候往往使用viewPager+TabLayout实现,但官方的TabLayout使用时往往不满足我们的需求,例如不能修改指示器长度的问题,本文利用巧妙的方法来解决
基本使用
在XML里这样用<com.google.android.material.tabs.TabLayoutandroid:id="@+id/tabLayout"style="@style/MyTabLayoutStyle"android:layout_width="match_parent"android:layout_height="97px"app:tabMaxWidth="0dp"app:tabGravity="fill"app:tabIndicatorFullWidth="false"app:tabMode="fixed"app:tabTextAppearance="@style/TabLayoutTextStyle" ><com.google.android.material.tabs.TabItemandroid:layout_width="wrap_content"android:layout_height="wrap_content"/><com.google.android.material.tabs.TabItemandroid:layout_width="wrap_content"android:layout_height="wrap_content"/><com.google.android.material.tabs.TabItemandroid:layout_width="wrap_content"android:layout_height="wrap_content"/></com.google.android.material.tabs.TabLayout><androidx.viewpager.widget.ViewPagerandroid:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical">
</androidx.viewpager.widget.ViewPager>
一个TabLayout 包含你需要的若干个TabItem 可以直接在TabItem里定义每个Item的标题text,也可以在代码里使用重写的Adapter的getpageTitle设置
TabItem没有什么特殊设置,指示器以及每个页签的设置都在TabLayout里
特殊用法
修改item宽度:通常使用时,每个item都是拥挤在中间紧挨着的,如果想让每个item平分宽度可以这样使用,在TabLayout里设置如下属性:app:tabMaxWidth="0dp" app:tabGravity="fill" app:tabMode="fixed"
然后TabLayout的宽度是match_parent
ItemLayout的宽度是wrap_content
修改文字颜色和大小
在TabLayout里无法直接用属性设置字体大小,可以使用app:tabTextAppearance属性来设置字体的属性
在style里设置
<style name="TabLayoutTextStyle"><item name="android:textSize">30px</item><item name="textAllCaps">true</item><item name="android:textStyle">bold</item></style>然后在TabLayout里引用app:tabTextAppearance="@style/TabLayoutTextStyle"
textAllCaps为设置文字是英文的时候全部大写
android:textStyle设置文字加粗
文字颜色可以在style里设置也可以直接在TabLayout里进行设置
tabTextColor=""
通常情况下会设置一个TabLayout的Style
<style name="MyTabLayoutStyle" parent="TextAppearance.Design.Tab"><item name="tabIndicatorColor">@color/green_line</item><item name="tabIndicatorHeight">8dp</item><item name="tabTextColor">@color/white_text</item>
</style>tabIndicatorColor设置指示器颜色
tabIndicatorHeight设置指示器高度
tabTextColor 设置文字颜色
修改指示器宽度:
默认情况下,指示器是跟着文字宽度来调整的,如果想铺满每个宽度则
有很多人喜欢用反射的方法去进行设置指示器的宽度,但是反射的方法用到了TabLayout的成员变量命名,新的TabLayout已经换了,经过测试无效,也懒得研究新的实现方法,这里采用一个投机取巧的方法来设置指示器的宽度
在TabLayout里有一个属性tabIndicatorFullWidth=true/false 当为true的时候,指示器的宽度为每个Item的宽度,如果是false的话,指示器的宽度是文字的宽度,这里设置为false,就是指示器的宽度是文字的宽度
然后在文字定义的地方使用空格占位符
在string资源文件内使用占位符的方法为
<string name="notice">Notice </string>
需要几个空格就添加几个占位符
这里在文字的左右两端都添加相同数量的空格占位符
然后就可以实现指示器比文字宽又比每个Item的总宽度窄的现象
有时候每个Item之间有间距,也可以通过这种方式让视觉上出现间距的现象,实际上每个Item还是紧挨着的
Android TabLayout基本使用及完美调整指示器位置的技巧相关推荐
- Android TabLayout修改指示器宽度方案汇总
目录 前言 TabLayout的视图结构 TabLayout绘制指示器的过程 1.从获取tabSelectedIndicator边界着手 1.1 默认情况下的指示器宽度 1.2 tabIndicato ...
- AppBarLayout中的Android TabLayout
In this tutorial, we'll discuss and implement Android TabLayout in our android application. Also we' ...
- Android绘制竖直虚线完美解决方案—自定义View
Android绘制竖直虚线完美解决方案-自定义View 开发中我们经常会遇到绘制虚线的需求,一般我们使用一个drawable文件即可实现,下面我会先列举常规drawable文件的实现方式. 使用dra ...
- Android TabLayout总结
文章目录 Android TabLayout总结 基本使用 添加图标.隐藏下划线 自定义下划线.添加分割线 设置角标 圆角样式 自定义View+Lottile 代码下载 Android TabLayo ...
- android tablayout固定,Android TabLayout属性和方法
TabLayout的属性 android.support.design:tabIndicatorColor - 设置tab指示器(tab的下划线)的颜色. android.support.design ...
- Android TabLayout(选项卡布局)简单用法实例分析
本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...
- android 车辆轨迹,Android自定义view实现车载可调整轨迹线
本文实例为大家分享了Android自定义view完成车载可调整轨迹线的具体代码,供大家参考,具体内容如下 同事做的view,拿过来做个记录. /** * */ package com.text.myv ...
- android camera滑动,Android怎么实现小米相机底部滑动指示器
Android怎么实现小米相机底部滑动指示器 发布时间:2021-04-15 14:39:38 来源:亿速云 阅读:94 作者:小新 这篇文章给大家分享的是有关Android怎么实现小米相机底部滑动指 ...
- Android TabLayout定制CustomView与ViewPager交互双向联动
Android TabLayout定制CustomView与ViewPager交互双向联动 我之前写了一些关于Android Material Design TabLayout的文章, (1)& ...
最新文章
- Python 列表List 的使用
- 性能测试之操作系统计数器分析方法
- python 循环中报错 继续运行_python中列表删除和多重循环退出
- 【Ansible】的python api
- Unbutu下安装mysql服务并允许远程登录
- Java Review - 并发编程_ CountDownLatch原理源码剖析
- 程序员如何开始新的工作(转)
- ngDialog 点击窗口以外不允许关闭弹窗
- 1.3 Integer类详解
- Visual C++——《可视化编程技术》实验报告——绘图与文本操作
- 牛客网_PAT乙级_1017打印沙漏(20)
- linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...
- 四年前从这里开始,四年后从这里继续-回归博客园
- 1、图解Oracle Logminer配置使用
- if 与 while
- java jvm理解_深入理解JVM(一)——基本原理
- MyIM服务端聊天记录(网络编程作业)
- Wireshark The capture session could not be initiated on interface报错解决
- 百度用AI“唤醒”历史,中国文化名片与科技名片相互成就
- 网站没有搜索功能怎么搜索_如何搜索任何网站,即使它没有搜索功能