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日

相关文章

  • Grpc微服务从零入门

    Grpc微服务从零入门 什么是Grpc gRPC是谷歌推出的一款高性能、开源的通用的 RPC 框架。其支持多种语言,并且可以运行在任何地方。gRPC 基于标准的HTTP / 2协议构建,并支持多种序列化和反序列化协议(protobuf、JSON)。这一点使得 gRPC 很适合分布式系统的构建,并可完美结合Kubernetes、Istio等云原生技术基础设施,…

    其他 2023年3月28日
    00
  • VS2010:error MSB4018提示CL任务意外失败怎么解决?

    当我们在使用VS2010编译程序时,有时候会出现”error MSB4018: The “CL” task failed unexpectedly”的错误提示。这个错误表示编译器在执行编译任务时遇到了一些问题,导致编译失败。 要解决这个错误,我们可以尝试以下几个步骤: 步骤一:清理项目和重新生成 首先,我们可以尝试清理项目并重新生成代码。在Visual St…

    other 2023年6月27日
    00
  • ASP.NET 应用程序级 验证用户是否登录 一般处理程序

    ASP.NET提供了多种方式来验证用户是否登录,其中应用程序级别的验证是通过在Global.asax中的Session_Start事件处理程序来实现的。下面是一般处理程序实现应用程序级别验证的具体步骤: 打开Visual Studio创建一个新的Web应用程序 添加一个一般处理程序(.ashx文件),命名为CustomHandler。此处理程序将提供验证用户…

    other 2023年6月25日
    00
  • Windows Azure 网站上的 WebSocket 简介

    Windows Azure 网站上的 WebSocket 简介 WebSocket是一种现代化的、专为浏览器和服务器之间实时交互而设计的通讯协议。它能够在单个TCP连接上进行全双工通讯,其设计初衷是用于web上的实时通信。 Windows Azure是微软的云计算平台,提供各种云服务,包括网站托管。在Windows Azure网站(Web App)上使用We…

    其他 2023年3月28日
    00
  • 屏蔽网页右键复制和ctrl+c复制的js代码

    要屏蔽网页右键复制和Ctrl+C复制功能,可以使用JavaScript编写代码。以下是具体的攻略步骤: 使用addEventListener()方法捕捉右键点击事件。 使用event.preventDefault()方法阻止捕捉到的事件的默认动作,即阻止右键菜单的弹出。 使用document.onkeydown()方法捕捉键盘按下事件。 检测是否同时按下了C…

    other 2023年6月27日
    00
  • iOS的UI开发中UITabBarControlle的基本使用教程

    iOS的UI开发中UITabBarController的基本使用教程 UITabBarController是iOS开发中常用的一种导航控制器,常用于多功能模块的切换。本教程将介绍UITabBarController的基本使用方法。 1.创建UITabBarController 在Xcode中新建一个工程,选择Single View App,创建好后,在Mai…

    other 2023年6月27日
    00
  • 设置高级NTFS权限的工具 XCACLS.vbs

    关于“设置高级NTFS权限的工具 XCACLS.vbs”的完整攻略,我们来分步骤说明: 1. 下载XCACLS.vbs工具 1.1 打开官方网站“Mark Russinovich’s Technical Blog”:https://docs.microsoft.com/en-us/sysinternals/downloads/xcacls。 1.2 点击“D…

    other 2023年6月27日
    00
  • 一篇文章带你搞定JAVA反射

    一篇文章带你搞定JAVA反射 什么是反射 Java反射是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;在运行时可以获取类的信息,并且可以操作类,比如获取构造方法和成员变量、方法的信息,以及调用方法等。 反射的作用 Java反射机制在框架开发和调试中经常用到,可以动态的创建对象,动态的访问和修改对象属性,动态的修改方法、调用方法。 反射的基…

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