在应用中,我们经常遇到多个页签切换的需求,这个时候往往使用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里

  1. 特殊用法
    修改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基本使用及完美调整指示器位置的技巧相关推荐

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

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

  2. AppBarLayout中的Android TabLayout

    In this tutorial, we'll discuss and implement Android TabLayout in our android application. Also we' ...

  3. Android绘制竖直虚线完美解决方案—自定义View

    Android绘制竖直虚线完美解决方案-自定义View 开发中我们经常会遇到绘制虚线的需求,一般我们使用一个drawable文件即可实现,下面我会先列举常规drawable文件的实现方式. 使用dra ...

  4. Android TabLayout总结

    文章目录 Android TabLayout总结 基本使用 添加图标.隐藏下划线 自定义下划线.添加分割线 设置角标 圆角样式 自定义View+Lottile 代码下载 Android TabLayo ...

  5. android tablayout固定,Android TabLayout属性和方法

    TabLayout的属性 android.support.design:tabIndicatorColor - 设置tab指示器(tab的下划线)的颜色. android.support.design ...

  6. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

  7. android 车辆轨迹,Android自定义view实现车载可调整轨迹线

    本文实例为大家分享了Android自定义view完成车载可调整轨迹线的具体代码,供大家参考,具体内容如下 同事做的view,拿过来做个记录. /** * */ package com.text.myv ...

  8. android camera滑动,Android怎么实现小米相机底部滑动指示器

    Android怎么实现小米相机底部滑动指示器 发布时间:2021-04-15 14:39:38 来源:亿速云 阅读:94 作者:小新 这篇文章给大家分享的是有关Android怎么实现小米相机底部滑动指 ...

  9. Android TabLayout定制CustomView与ViewPager交互双向联动

     Android TabLayout定制CustomView与ViewPager交互双向联动 我之前写了一些关于Android Material Design TabLayout的文章, (1)& ...

最新文章

  1. Python 列表List 的使用
  2. 性能测试之操作系统计数器分析方法
  3. python 循环中报错 继续运行_python中列表删除和多重循环退出
  4. 【Ansible】的python api
  5. Unbutu下安装mysql服务并允许远程登录
  6. Java Review - 并发编程_ CountDownLatch原理源码剖析
  7. 程序员如何开始新的工作(转)
  8. ngDialog 点击窗口以外不允许关闭弹窗
  9. 1.3 Integer类详解
  10. Visual C++——《可视化编程技术》实验报告——绘图与文本操作
  11. 牛客网_PAT乙级_1017打印沙漏(20)
  12. linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...
  13. 四年前从这里开始,四年后从这里继续-回归博客园
  14. 1、图解Oracle Logminer配置使用
  15. if 与 while
  16. java jvm理解_深入理解JVM(一)——基本原理
  17. MyIM服务端聊天记录(网络编程作业)
  18. Wireshark The capture session could not be initiated on interface报错解决
  19. 百度用AI“唤醒”历史,中国文化名片与科技名片相互成就
  20. 网站没有搜索功能怎么搜索_如何搜索任何网站,即使它没有搜索功能

热门文章

  1. “第四产业”升级,中软国际“蝶变”
  2. 怎么释放C盘空间?清理C盘空间的4大方法分享!
  3. h5学习笔记:rem单位在一些安卓机计算异常
  4. 微信公众号开发(1)
  5. 【CCF会议期刊推荐】CCF推荐国际学术期刊/会议(计算机图形学与多媒体)
  6. IDEA上的项目托管到码云步骤
  7. 类加载器+反射+Properties
  8. 索引是什么,怎么确定索引
  9. java解析Excel里面的数据
  10. Shang Nicht mehr Hut Wird Bambus Faser Un