Android---TabLayout

2023-11-10

目录

TabLayout

TabItem

​编辑

演示效果的xml

TabLayout

TabLayout 在开发中一般作为选项卡使用,常与 ViewPager2 和 Fragment 结合起来使用。

    常用属性:

    \bullet app:tabBackground 设置 TabLayout 的背景色,改变整个TabLayout 的颜色;

    \bullet app:tabTextColor 设置未被选中时文字的颜色;

    \bullet app:tabSelectorColor 设置选中时文字颜色;

    \bullet​​​​​​​ app:tabTextAppearance="@android:style/TextAppearance.Large" 设置 TabLayout 的文本主题,无法通过 textSize 来设置文字大小,只能通过主题来设定;

    \bullet​​​​​​​ app:tabMode="scrollable"设置 TabLayout 可滑动,当 tabItem 个数较多时,一个界面无法呈现所有的导航标签,此时就必须要用;

    \bullet​​​​​​​ app:tabIndicator 设置指示器;

    \bullet​​​​​​​ app:tabIndicatorColor 设置指示器颜色;

    \bullet​​​​​​​ app:tabIndecatorHeight 设置指示器高度,当 app:tabIndecatorHeight="0dp",隐藏 Indicator 效果;

    \bullet app:tabTextAppearance="@android:style/TextAppearance.Holo.Large" 改变 TabLayout 里 TabItem 文字的大小;

    \bullet app: tabPadding 设置 Tab 内部 item 的 padding。也可以单独设置某个方向的padding, 比如 app:tabPaddingStart 设置左边距;

    \bullet app:paddingEdng / app:paddingStart 设置整个 TabLayout 的 padding;

    \bullet app:tabGravity="center" 居中,如果是 fill,则充满;

    \bullet app:tabMaxWidth / app:tabMinWidth 设置最大/最小的 tab 宽度,对 Tab 的宽度进行限制。

TabItem

 给TabLayout 添加 Item 有两种方法,其中一种就是使用 TabItem 在 xml 里直接添加。

    1. 使用TabItem 给 TabLayout 添加卡片。

<com.google.android.material.tabs.TabItem
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:icon="@android:drawable/ic_menu_add"
     android:text="添加"/>

    \bullet android:icon 设置图标;

    \bullet Android:text 设置文本;

    2. 通过代码添加。使用 TabLayoutMediator()

        new TabLayoutMediator(binding.tab, binding.viewPager, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                //TODO 设置卡片的文本/图标
                tab.setText(mTitles.get(position))
                   .setIcon(mIcons.get(position));
            }
        }).attach();

其中 mTitles 和 mIcons 是存放 text 和 Icon 的list。效果如下:

可以看到 text 在英文状态下默认都是大写, 这是因为在 TabLayout 的源码中默认设置属性 textAllCaps=true。所以可以在 TabLayout 中设置如下属性来改成小写。

app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"

 

演示效果的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp">

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_add"
            android:text="添加"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_delete"
            android:text="删除"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_camera"
            android:text="相机"/>
    </com.google.android.material.tabs.TabLayout>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs1"
        style="@style/Widget.MaterialComponents.TabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="scrollable"
        android:layout_margin="8dp">

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_add"
            android:text="添加"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_delete"
            android:text="删除"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_camera"
            android:text="相机"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_add"
            android:text="添加"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_delete"
            android:text="删除"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_camera"
            android:text="相机"/>

    </com.google.android.material.tabs.TabLayout>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs2"
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorColor="@color/purple_700"
        android:layout_margin="8dp">

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_add"
            android:text="添加"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_delete"
            android:text="删除"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_camera"
            android:text="相机"/>
    </com.google.android.material.tabs.TabLayout>

    <com.google.android.material.tabs.TabLayout
        android:layout_margin="8dp"
        android:id="@+id/tabs3"
        style="@style/Widget.Design.TabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_add"
            android:text="添加" />

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_call"
            android:text="删除" />

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_camera"
            android:text="菜单" />

    </com.google.android.material.tabs.TabLayout>
    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs4"
        app:tabTextAppearance="@android:style/TextAppearance.Holo.Large"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorHeight="0dp"
        android:layout_margin="8dp">

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_add"
            android:text="add"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_delete"
            android:text="删除"/>
        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:icon="@android:drawable/ic_menu_camera"
            android:text="相机"/>
    </com.google.android.material.tabs.TabLayout>

</LinearLayout>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android---TabLayout 的相关文章

  • Android Volley 对于一个请求返回两次结果

    我两天来一直在试图解决这个问题 但我完全被难住了 由于某种原因 我向队列发送一个请求 但 volley 返回两次 这会调用侦听器两次并使列表视图中的结果加倍 我打开了 Volley 的日志记录 可以看到请求被添加到队列中并返回 然后几秒钟后
  • 使用街景图像

    我想获取街景图片 注明纬度和经度 并显示在对话框中 这可能吗 我在这里看到了一些示例 但没有找到一个向我展示如何在对话框中显示图像的示例 抱歉 如果网站中已经存在这个问题 但我在搜索时没有找到 是的你可以 作为 URL 根 你可以使用这个h
  • 如何从自定义视图访问主机片段的生命周期范围?

    我需要在自定义视图中使用协程 看完这个之后 我相信我最好的选择是使用生命周期范围作为协程作用域 这样当lifecycleowner被销毁时 它会自动取消 但是我似乎无法访问自定义视图中的生命周期范围 根据文档 https developer
  • Cordova 无法构建项目

    Update 新读者 请检查我最后的编辑 更新cordova后 无法构建 运行 Mac mini de Toni funcook toniweb sudo cordova build Password Running command Use
  • 64位版本的adb和fastboot?

    我在 Debian 7 3 x64 已完全修补 上发现了以下错误 我很确定这是因为adb即使在其 SDK 工具的 64 位发行版中也是 32 位 which adb opt android sdk platform tools adb op
  • 如何使用 JavaScript 提高音频加载速度?

    我已经创建了播放代码 mp3使用 JavaScript 文件 但该文件在 Android 上播放需要很长时间 我想在点击文本图像后快速播放声音 如何提高 Android 的加载速度 我的 JavaScript 代码 if window au
  • Jetpack Compose 中的图像裁剪器?

    我到处搜索 但没有找到有关在 Jetpack Compose 中裁剪图像的文档 如何在 Jetpack Compose 中裁剪图像 实际上 您可以使用那些较旧的 Android 库 没有问题 我用的是这个 https github com
  • Kotlin Android Studio - Var 在 SDK 29 中被视为 val

    我在 Kotlin 中遇到了一件非常奇怪的事情 我有 var myClipboard getSystemService CLIPBOARD SERVICE as ClipboardManager var myClip ClipData Cl
  • android 无法解析方法 setcontentview

    今天在android studio 中遇到了一个错误 我正在尝试在应用程序中创建一个关于我们的屏幕 布局 xml 文件已创建 任何帮助表示赞赏 谢谢 错误 无法解析方法 setcontentview int package example
  • Gradle 同步失败:配置项目“:lib”时出现问题

    我正在尝试在 android studio 中构建一个项目 但它总是失败 并出现名为 org gradle api ProjectConfigurationException A problem occurred configuring p
  • 如何在android.mk文件中指定c头文件

    我有一个 c 源文件夹名称 clib 其中 我有一些示例文件 例如 1 h 1 c 2 h 2 c 3 c 3 h 在该文件夹之外我有 4 个 h 4 c 4 jni h 4 jni c 现在为了构建 so 我创建了像这样的 android
  • 如何判断手机是否有刘海

    如果存在缺口 我需要修改应用程序的工具栏 现在 该凹口隐藏了工具栏中的一些内容 if Build VERSION SDK INT Build VERSION CODES LOLLIPOP Build VERSION SDK INT Buil
  • android.provider.Settings.ACTION_BLUETOOTH_SETTINGS 在三星上崩溃

    任何人都知道为什么 Intent pairIntent new Intent android provider Settings ACTION BLUETOOTH SETTINGS startActivityForResult pairIn
  • 是否可以为 DialogFragment 制作动画?

    我尝试了有关片段动画的各种示例 但没有任何反应 所以 DialogFragment 不是 正确的 片段吗 或者我在这里遗漏了什么 FragmentTransaction ft getFragmentManager beginTransact
  • Android - 使用 Intent 打开 PDF 文档关闭后不保存

    我面临的问题是 当尝试保存对使用此 URI 打开的 PDF 文档的更改时内容 xx xxx xxx fileprovider external Download Sync FileName pdf 我所做的任何更改在关闭文档后都不会保存 但
  • 清单合并失败:需要为 显式指定 android:exported

    我的清单文件有问题 错误消息 清单合并失败 android 需要为 明确指定导出 面向 Android 12 及更高版本的应用需要指定显式值android exported当相应的组件定义了意图过滤器时 有关详细信息 请参阅 https d
  • 选择活动时运行时崩溃

    首先我想说我几乎没有 Android 经验 这是我在 Android 中的第一个项目 而且我的老师不太擅长教学 所以我对任何过度的无知表示歉意 在进一步讨论之前先解释一下 我的应用程序的目标本质上是能够记录您在某些活动上花费了多少时间 记录
  • 只需更新一个小部件 RemoteViews 而不是完全创建一个新小部件?

    在 AppWidgetProvider 类的 onUpdate 方法中 我最终执行了大量代码 以便我可以完全重新创建一个新的 RemoteView 对象 现实是 每次更新时 我实际上只需要在 RemoteView 中的 TextView 之
  • 找不到 `activityViewModels()` Hilt Android

    我在我的项目中使用 Hilt 和 MVVM 我想要一个viewModel from activityViewModel在 2 个活动中使用相同的内容 但我的 Android Studio 说未解析的参考 我的应用程序 build gradl
  • 扩展Android应用程序类

    当我正在寻找从远程设备获取错误报告的解决方案时 就像 iOS 中的试飞应用程序一样 我发现了acra适用于 Android 设备here http code google com p acra wiki BasicSetup 在基本设置中

随机推荐

  • ASP.NET 中得到网站绝对路径的几种方法

    在编写 ASP NET 应用程序的时候 有时为了更好地进行控制静态文件的路径 如在模板页或者用户控件中设置js或者css文件的路径等 采用绝对路径是难免的 下面就是几种获取绝对路径的几种方法 C 代码 VirtualPathUtility
  • SVN学习笔记 .

    转载自 http blog csdn net tengbaichuan article details 10632349 参考文档 官方文档 http www subversion org cn svnbook 包括可下载的PDF 和一页H
  • 浅谈npm、yarn、cnpm、pnpm(内附网址链接)

    1 npm 1 1 npm简介 npm由三个独立的部分组成 网站 网站是开发者查找包 package 设置参数以及管理npm使用体验的主要途径 注册表 registry 注册表是一个巨大的数据库 保存了每个包 package 的信息 命令行
  • Ubuntu 16.04 取消 conda 自动启动工作空间 base

    问题描述 Ubuntu 16 04 安装conda 之后它会自动启动工作空间base base的默认 Python 版本是 3 7 而Ubuntu 16 04 的默认 Python 版本是2 7 解决方案 如果不想默认启动 base工作空间
  • gcc g++ 学习

    一 编译的时候 此时main cpp头文件是 include Person h g main cpp Person Person cpp o main I Person 解析 Person Person cpp 链接main cpp的上一层
  • 工厂模式--Factory Method with Go

    Factory Method 工厂设计模式允许创建对象 而无需指定将要创建的对象的确切类型 Implementation 举个栗子 用个例子展示怎么把数据存储在不同的后端 比如 内存 磁盘 Types type 一个Store interf
  • PAT C入门题目-竖着输出字符串(Z:c语言求数组长度 sizeof()&strlen())

    7 2 I Love GPLT 5 分 这道超级简单的题目没有任何输入 你只需要把这句很重要的话 I Love GPLT 竖着输出就可以了 即每个字符占一行 包括空格 即每行只能有1个字符和回车 include
  • sketch基础教程大全,对象、图层、画板常见技巧

    sketch对象 图层 画板的使用技巧 1 通过快捷键调整图形的形状 选择图形 按住Command按键 然后通过上 下 左 右方向键按1像素调整图形形状 同时按住按钮 CommandShift方向键 可调整方向键 2 复制元素 选择一个元素
  • Python爬虫从入门到精通:(24)scrapy框架01_scrapy框架的认识、安装_Python涛哥

    scrapy框架的认识 安装 框架简介 什么是框架 所谓的框架其实就是一个被集成了很多功能且具有很强通用性的一个项目模板 怎么学习 学习的是框架中集成好的各种功能的特性是作用 进阶学习 逐步的探索框架的底层 安装scrapy 是一个专门用于
  • 数据结构和算法(二)

    ArrayList 和LinkedList原理 代码实现 性能区别 1 ArrayList 为什么查询快 数组和集合区别 动态大小 数组的长度是固定的 ArrayList 数组集合 内部使用数组实现的 自定义ArrayList 如下 pub
  • 如何理解受控和非受控件组件?

    受控组件 受控组件是React中的一种组件 其特点是输入框的值 value 由React状态 state 控制 也就是说 React中的状态变化会直接影响输入框的值 受控组件通过form的输入元素 input select等 的value属
  • 孕期做什么副业好?在家兼职挣钱的孕妇不仅能很好地抚养孩子,还能继续她们的职业生涯

    孕期做什么副业好 在家兼职挣钱的孕妇不仅能很好地抚养孩子 还能继续她们的职业生涯 许多孕妇在得知怀孕后会在家休息分娩 一旦你在家休假分娩 你会感到特别无聊 无聊 甚至沮丧 这对胎儿的发育会非常不利 所以在这个时候 那些希望在家分娩的孕妇可以
  • composer改回原来的源

    以前为了图安装快 把composer的源改成了国内的 composer config g repo packagist composer https packagist phpcomposer com 今天使用时发现还要用户名和密码登录 怕
  • CentOS7.3编译安装go1.10.1

    直接使用编译好的包 go1 10 1 linux amd64 tar gz 下载go wget https studygolang com dl golang go1 10 1 linux amd64 tar gz tar xvf go1
  • vscode中如何快速生成vue3模板-非常实用的小技巧

    vscode中如何快速生成vue3模板 在vue项目开发过程中 我们会发现我们每次新建一个vue组件文件的时候 都需要写一些重复的代码 比如下面代码
  • 运算放大器---虚短和虚断

    运算放大器 虚短和虚断 前言 运算放大器两板斧 虚短 虚断 虚短 在分析运算放大器处于线性状态时 可把两输入端视为等电位 这一特性称为虚假短路 简称虚短 当某一端接地的时候 V V 0 虚断 在分析运放处于线性状态时 可以把两输入端视为等效
  • Conda——问题解决:CondaValueError: Malformed version string ‘~’ : invalid character(s)

    报错截图 解决方法 更新conda即可 conda upgrade n base c defaults override channels conda 成功截图
  • 1-7、Lua迭代器与泛型for

    1 7 Lua迭代器与泛型for 理解为主 必选先理解闭包的概念和用法 文章目录 1 7 Lua迭代器与泛型for 理解为主 必选先理解闭包的概念和用法 1 迭代器与闭包 2 范性for的语义 3 无状态的迭代器 4 多状态的迭代器 5 真
  • C++多态

    C 多态 一 多态的概念 二 多态的定义以实现 虚函数 多态构成条件 虚函数的重写 虚函数重写的两个例外 C 11的override和final 重载 重写和重定义的对比 抽象类 概念 接口继承与实现继承 多态的原理 虚函数表 打印虚函数表
  • Android---TabLayout

    目录 TabLayout TabItem 编辑 演示效果的xml TabLayout TabLayout 在开发中一般作为选项卡使用 常与 ViewPager2 和 Fragment 结合起来使用 常用属性 app tabBackgroun