TabLayout用法详解及自定义样式

yizhihongxing

项目中常见的 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日

相关文章

  • thinkphp的URL路由规则与配置实例

    ThinkPHP的URL路由规则与配置实例攻略 1. 什么是URL路由规则? URL路由规则是指通过定义URL的规则,将请求的URL地址映射到具体的控制器和方法上。ThinkPHP提供了灵活的URL路由配置,可以根据需求进行自定义。 2. URL路由配置实例 2.1 基本路由配置 在ThinkPHP中,可以通过修改route.php文件来配置URL路由规则。…

    other 2023年8月18日
    00
  • Axure RP 8.1最新汉化破解安装详细教程(附汉化包下载)

    Axure RP 8.1最新汉化破解安装详细教程(附汉化包下载) 概述 本教程将向您展示如何安装、汉化和破解Axure RP 8.1,以便您可以获得完整的软件功能,并使用中文界面。 环境要求 操作系统:Windows 7 或更高版本 需卸载旧版本Axure RP 步骤 1. 下载安装文件 从Axure官网下载最新版本的Axure RP 8.1安装包(http…

    other 2023年6月27日
    00
  • java实现TCP socket和UDP socket的实例

    Java实现TCP Socket和UDP Socket是网络编程中非常常见的任务。在此,我将向你介绍Java实现TCP和UDP Socket的完整攻略。 TCP Socket 步骤 Java实现TCP Socket的步骤如下: 1.创建一个ServerSocket对象,绑定IP地址和端口号 ServerSocket serverSocket = new Se…

    other 2023年6月27日
    00
  • Spring源码之循环依赖之三级缓存详解

    下面是对”Spring源码之循环依赖之三级缓存详解”的完整攻略: 什么是循环依赖 循环依赖指的是对象之间出现相互依赖的情况,通常是两个或多个对象互相持有对方的引用,从而导致它们之间出现循环依赖的问题。在Spring框架中,循环依赖的问题通常在bean的创建过程中出现。 三级缓存解决循环依赖问题 Spring框架为了解决bean之间的循环依赖问题,设计了三级缓…

    other 2023年6月27日
    00
  • Ubuntu 16.04上安装 Swift 3.0及问题解答

    在Ubuntu 16.04上安装Swift 3.0及问题解答攻略 1. 安装依赖项 在安装Swift之前,我们需要安装一些依赖项。打开终端并执行以下命令: sudo apt-get update sudo apt-get install clang libicu-dev libcurl4-openssl-dev libssl-dev libxml2 2. 下…

    other 2023年8月3日
    00
  • xversion使用

    以下是xversion使用的完整攻略: xversion使用 xversion是一个用于管理Python项目版本的工具。以下是使用xversion的步骤: 1. 安装xversion 使用pip安装xversion“`bashpip install xversion ### 2. 配置xversion 在项目根目录下创建一个名为xversion.cfg的文…

    other 2023年5月7日
    00
  • 朋友网手机客户端下载页面的设计分享(图文)

    来一步一步讲解一下“朋友网手机客户端下载页面的设计分享(图文)”的完整攻略。 1. 确定页面设计的方向和主题 在设计“朋友网手机客户端下载页面”时,需要确定手机客户端的主题和方向,包括页面风格、配色方案、字体、布局等。具体的方向可以通过市场调研和竞品研究来确定,设计时要考虑用户群的需求和关注点,以及如何通过设计来突出产品的优势和特点。 2. 设计页面结构和布…

    other 2023年6月25日
    00
  • sql中去除重复的数据selectdistinct*fromtable

    SQL中去除重复的数据 在数据库中,我们常常需要对数据进行去重操作。SQL提供了一个非常方便的方法,即使用DISTINCT关键字。 SELECT DISTINCT语法 使用SELECT DISTINCT可以快速去除表中的重复行,其用法如下: SELECT DISTINCT column1, column2, … FROM table_name; colu…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部