TabLayout用法详解及自定义样式

项目中常见的 TabLayout 控件是 Android Design Support Library 中的 TabLayout,它可以让我们轻松地实现标签页切换,特别适合用于一些包含多个页面的 App 中。本文将介绍 TabLayout 的用法及自定义样式的实现。

TabLayout 简介

TabLayout 是一个可滚动标签页的控件,和 ViewPager 一起使用可以实现页面切换。TabLayout 支持滚动、图标、文本、吸顶以及与 ViewPager 的联动等功能。

TabLayout 用法

1. 导入 TabLayout

首先需在 build.gradle 中导入 TabLayout 的库:

implementation 'com.android.support:design:28.0.0'

2. 在布局文件中添加 TabLayout

在布局文件中添加 TabLayout 控件,可以设置 id 和一些常用的布局属性,如下所示:

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    app:tabMode="scrollable"
    app:tabGravity="fill"/>

3. 在 Activity 或 Fragment 中设置 TabLayout

TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
...

以上代码中,我们通过调用 TabLayoutaddTab() 方法添加了两个标签页,这两个标签页都设置了文本,若需要添加其它属性,则可以通过 TabLayout.TabsetCustomView() 方法进行设置。

4. 监听 TabLayout 的切换

我们可以给 TabLayout 设置 addOnTabSelectedListener() 方法来监听切换标签页的事件,也可以给 ViewPager 设置 addOnPageChangeListener() 方法来监听滑动事件,这两者的区别在于,前者的效果是点击即切换,后者是滑动到标签页才进行切换。

示例一:使用 TabLayout 与 ViewPager 实现 Fragment 切换

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private TabLayout tabLayout;
    private List<Fragment> fragmentList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        tabLayout = findViewById(R.id.tab_layout);
        viewPager = findViewById(R.id.view_pager);

        // 添加 Fragment
        fragmentList.add(new Fragment1());
        fragmentList.add(new Fragment2());
        fragmentList.add(new Fragment3());

        // 添加 TabLayout 标签页文本
        tabLayout.addTab(tabLayout.newTab().setText("Fragment 1"));
        tabLayout.addTab(tabLayout.newTab().setText("Fragment 2"));
        tabLayout.addTab(tabLayout.newTab().setText("Fragment 3"));

        // 创建 Fragment 管理器
        FragmentManager fragmentManager = getSupportFragmentManager();

        // 创建适配器
        PagerAdapter pagerAdapter = new PagerAdapter(fragmentManager, fragmentList);

        // 绑定适配器与 TabLayout
        viewPager.setAdapter(pagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
    }
}

以上代码中,我们通过 ViewPagerFragmentPagerAdapter 组合的方式实现了 Fragment 的切换效果。

示例二:使用自定义布局实现 TabLayout 的样式

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    app:tabMode="scrollable"
    app:tabGravity="fill"
    app:tabIndicatorHeight="0dp"
    app:tabTextAppearance="@style/TabLayoutTextStyle"
    app:tabBackground="@drawable/tab_layout_bg"/>

以上代码中,tabIndicatorHeight 设置底部横条高度为 0,app:tabTextAppearance 设置文本样式,app:tabBackground 则设置了背景图,本例中自定义了 Drawable 类型的 tab_layout_bg

综上,我们通过以上示例实现了 TabLayout 的用法及自定义样式的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TabLayout用法详解及自定义样式 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • ubuntu下安装和破解navicat的方法

    Ubuntu下安装和破解Navicat的方法 Navicat是一款综合性的数据库管理工具,适用于多种操作系统。本文将介绍如何在Ubuntu系统下安装和破解Navicat。 安装Navicat 下载Navicat安装包 首先访问Navicat官网下载适合你系统版本的Navicat安装包。 安装Navicat 下载完成后解压安装包并进入安装目录,终端输入以下命令…

    其他 2023年3月29日
    00
  • win10英雄联盟图形设备初始化失败怎么办?

    怎样解决“Win10英雄联盟图形设备初始化失败”? 如果您在运行英雄联盟游戏时遇到了“图形设备初始化失败”的错误提示,那么您可以按照以下步骤进行操作。 检查显卡驱动程序 首先,您需要确保您的电脑上已安装最新的显卡驱动程序,因为很多时候这个错误是由过时的、已损坏的或错误的显卡驱动程序引起的。您可以按以下步骤操作以更新您的显卡驱动程序: 打开您的电脑的设备管理器…

    other 2023年6月20日
    00
  • Centos设置静态IP及修改Centos配置文件的方法

    下面我将详细讲解如何在CentOS操作系统上设置静态IP及修改CentOS配置文件的方法。步骤如下: 步骤1:打开网卡配置文件 在CentOS系统中,所有网卡相关的配置信息存储在 /etc/sysconfig/network-scripts/ 目录下。因此,首先你需要打开该目录下的对应网卡的配置文件进行编辑。 比如,如果你要修改eth0网卡的配置信息,可以执…

    other 2023年6月25日
    00
  • 脚本设置ipbat命令行设置自动获取ip和固定ip

    脚本设置ipbat命令行设置自动获取ip和固定ip 在进行网络配置的时候,我们通常需要设置IP地址。在Windows系统中,我们可以通过命令行设置IP地址,这里介绍一种通过脚本文件来设置IP地址的方法。 1. 创建一份批处理脚本 打开记事本或任何文本编辑器,输入以下命令: @echo off set /p dhcpip=是否自动获取IP地址[Y/N]: if…

    其他 2023年3月29日
    00
  • java中静态代码块与构造方法的执行顺序判断

    Java中类的构造方法和静态代码块都属于初始化块,它们用于在对象创建前完成对类的初始化。但是在Java中,静态代码块和构造方法的执行顺序又有一定的区别。下面是Java中静态代码块和构造方法的执行顺序判断的完整攻略: Java中静态代码块的执行顺序 Java中静态代码块是在类第一次被加载的时候执行,而且只会执行一次,因为类只会被加载一次。Java虚拟机在执行类…

    other 2023年6月26日
    00
  • 函数flst_init

    函数flst_init 函数flst_init是一种图像处理算法中的函数,用于对图像进行分割处理。本攻略将详细讲解函数flst_init的原理、实现方法和示例说明。 原理 函数flst_init的原理是对图像进行分割处理,将图像中的每个像素分配到不同的区域中。具体来说,函数flst_init可以分为以下几步骤: 1.图像进行预处理,如去噪、增强等。 对图像进…

    other 2023年5月7日
    00
  • 详解Java设计模式之单例模式

    详解Java设计模式之单例模式 1. 什么是单例模式? 单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。 2. 何时使用单例模式? 当我们需要确保某个类只能有一个实例,并且该实例必须全局可访问时,我们可以使用单例模式。 3. 如何实现单例模式? 单例模式的实现一般包括两个步骤: 3.1 将类的构造器私有化 为了保证只有一个实例,…

    other 2023年6月27日
    00
  • webdriver简介及浏览器的驱动

    以下是“WebDriver简介及浏览器驱动的完整攻略”的标准markdown格式文本,其中包含了两个示例: WebDriver简介及浏览器驱动的完整攻略 WebDriver是一种用于自动化测试的工具,可以模拟用户在浏览器中的操作,例如点击、输入、提交等。以下是WebDriver的简介及浏览器驱动的完整攻略。 1. WebDriver简介 WebDriver是…

    other 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部