TabLayout与ToolBar、ViewPager的使用
目录
1. 在ToolBar中添加TabLayout
2. 将工具栏设为活动栏
3. 初始化TabLayout
4. TabLayout监听器
可以在ToolBar工具栏中添加TabLayout配合,效果如下图。

1. 在ToolBar中添加TabLayout
TabLayout的常用属性有:
tabBackground 指定标签的背景
tabIndicatorColor 指定下划线颜色
tabIndicatorHeight 指定下划线高度
tabTextColor 指定标签文字颜色
tabSelectedTextColor 指定选中文字的颜色
tabTextAppearance 指定标签文字的风格
//在XML文件中添加包含TabLayout的ToolBar和ViewPager<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout ... ...><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><androidx.appcompat.widget.Toolbarandroid:layout_width="match_parent"android:layout_height="50dp"android:id="@+id/toolBar"android:background="@color/purple_200"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><com.google.android.material.tabs.TabLayoutandroid:layout_marginLeft="20dp"android:layout_marginRight="20dp"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/tabLayout"app:tabTextColor="@color/black"app:tabBackground="@color/white"app:tabIndicatorColor="@color/black"app:tabSelectedTextColor="@color/purple_200"app:tabIndicatorHeight="5dp"/></RelativeLayout></androidx.appcompat.widget.Toolbar><androidx.viewpager.widget.ViewPagerandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/toolBar"android:id="@+id/viewPager"android:background="@color/white"/></RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
2. 将工具栏设为活动栏
//清单文件
android:theme="@style/Theme.Design.NoActionBar"
//Activity的onCreate()方法//工具栏
Toolbar toolbar=findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
3. 初始化TabLayout
TabLayout对象常用方法:
newTab() 创建标签(TabLayout.Tab)
addTab( TabLayout.Tab tab ) 添加标签
selectTab( TabLayout.Tab tab ) 选中标签
Tab对象常用方法:
setIcon( int drawableId ) 设置标签图标
setText( String text ) 设置标签文本
getPosition() 获取标签位置
//初始化TabLayout//TabLayout
TabLayout tabLayout=findViewById(R.id.tabLayout);
//Tab
TabLayout.Tab tab1=tabLayout.newTab();
tab1.setIcon(R.drawable.icon);
TabLayout.Tab tab2=tabLayout.newTab();
tab2.setText("tab2");
tabLayout.addTab(tab1);
tabLayout.addTab(tab2);
//初始化ViewPager//翻页视图适配器
private class MyAdapter extends PagerAdapter{private ArrayList<View> data;public MyAdapter(){//准备数据View v1= LayoutInflater.from(MainActivity.this).inflate(R.layout.my_item_layout,null,false);View v2= LayoutInflater.from(MainActivity.this).inflate(R.layout.my_item_layout2,null,false);data=new ArrayList<>();data.add(v1);data.add(v2);}public int getCount() {return data.size();}public Object instantiateItem(@NonNull ViewGroup container, int position) {//插入container.addView(data.get(position));return data.get(position);}public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {//移出container.removeView(data.get(position));}public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {if(view.equals(object)){return true;}return false;}
}//ViewPager
ViewPager viewPager=findViewById(R.id.viewPager);
viewPager.setAdapter(new MyAdapter());
4. TabLayout监听器
可以为TabLayout设置监听器,以达到点击标签时ViewPager改变;同时可以为ViewPager设置监听器,以达到ViewPager翻页时标签改变。
//TabLayout监听器
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {public void onTabSelected(TabLayout.Tab tab) {//选中//设置翻页视图positionviewPager.setCurrentItem(tab.getPosition());}public void onTabUnselected(TabLayout.Tab tab) {//未选中}public void onTabReselected(TabLayout.Tab tab) {//再次选中}
});//Tab数组
ArrayList<TabLayout.Tab> tabs=new ArrayList<>();
tabs.add(tab1);
tabs.add(tab2);//ViewPager监听器
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {//在翻页过程中触发//第一个参数表示当前页面序号;第二个参数表示当前页面偏移量,取值在0到1之间;第三个参数表示当前页面的偏移距离}public void onPageSelected(int position) {//翻页//TabLayout变化tabLayout.selectTab(tabs.get(position));}public void onPageScrollStateChanged(int state) {//在翻页状态改变时触发//参数为翻页状态:0为静止 1为正在滑动 2为滑动完毕//滑动状态依次为:正在滑动(1) -> 滑动完毕(2) -> 静止(0)}
});
tag:翻页视图,ViewPager,工具栏,活动栏,ToolBar,标签,Tab,TabLayout
相关文章:
TabLayout与ToolBar、ViewPager的使用
目录 1. 在ToolBar中添加TabLayout 2. 将工具栏设为活动栏 3. 初始化TabLayout 4. TabLayout监听器 可以在ToolBar工具栏中添加TabLayout配合,效果如下图。 1. 在ToolBar中添加TabLayout TabLayout的常用属性有: tabBackground 指定标签的背景 t…...
链表基础知识详解(非常详细简单易懂)
概述: 链表作为 C 语言中一种基础的数据结构,在平时写程序的时候用的并不多,但在操作系统里面使用的非常多。不管是RTOS还是Linux等使用非常广泛,所以必须要搞懂链表,链表分为单向链表和双向链表,单向链表很…...
SAP PP学习笔记05 - BOM配置(Customize)1 - 修正参数
上次学习了BOM相关的内容。 SAP PP学习笔记04 - BOM1 - BOM创建,用途,形式,默认值,群组BOM等_sap销售bom与生产bom-CSDN博客 SAP PP学习笔记04 - BOM2 -通过Serial来做简单的BOM变式配置,副明细,BOM状态&…...
前端从普通登录到单点登录(SSO)
随着前端登录场景的日益复杂化和技术思想的不断演进,前端在登录方面的知识结构变得越来越复杂。对于前端开发者来说,在日常工作中根据不同的登录场景提供合适的解决方案是我们的职责所在,本文将梳理前端登录的演变过程。 1、无状态的HTTP H…...
考研总计划(基础篇)
分为数学,专业课,英语三个部分 数学规划表 高数基础:3月初到4月15号 具体实行计划:分为看课日和写题日 看课日:早上10点到12点半看课,19:30到21:30继续看课。 写题日:早上10点到12点半复习前一天的题目࿰…...
力扣周赛387
第一题 代码 package Competition.The387Competitioin;public class Demo1 {public static void main(String[] args) {}public int[] resultArray(int[] nums) {int ans[]new int[nums.length];int arr1[]new int[nums.length];int arr2[]new int[nums.length];if(nums.leng…...
部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片
PhotoMaker只需要一张人脸照片就可以生成不同风格的人物照片,可以快速出图,无需额外的LoRA培训。 安装环境 python 3.10gitVisual Studio 2022 安装依赖库 git clone https://github.com/bmaltais/PhotoMaker.git cd PhotoMaker python -m venv venv…...
挑战杯 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层:2.4 池化层:2.5 全连接softmax层:2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…...
关于RSA公私钥加密报错Data must not be longer than 117 bytes问题解决办法
一、问题描述 1.背景 大家都知道,在日常项目开发过程中,数据的传输安全一直都是值得重视的问题,当然了市面上解决此类办法的技术也有很多,本项目在提供给第三方使用是数据以及校验第三方传递的参数,采用常用的RSA公私…...
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
目录 一、 Kubernetes 的概述 二、服务器配置 2.1 服务器部署规划 2.2服务器初始化配置 三、安装Docker/kubeadm/kubelet【所有节点】 3.1 安装Docker 3.2 添加阿里云YUM软件源 3.3 安装kubeadm,kubelet和kubectl 四、部署Kubernetes Master 五、部署Kube…...
Android 开发环境搭建的步骤
本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具,以下是一些基础步骤: 1. 安装 Java Development Kit (JDK) 首先,您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础…...
六、继承(一)
1 继承的引入 以往我们想分别实现描述学生、老师的类,可能会这样子做: class Student {string _name;string _number;int _tel;int id;string _address;int _age; }; class Teacher {string _name;int _level;int _tel;int id;string _address;int _ag…...
数字化转型导师鹏:政府数字化转型政务服务类案例研究
政府数字化转型政务服务类案例研究 课程背景: 很多地方政府存在以下问题: 不清楚标杆省政府数字化转型的政务服务类成功案例 不清楚地级市政府数字化转型的政务服务类成功案例 不清楚县区级政府数字化转型的政务服务类成功案例 课程特色&#x…...
解决ODOO12 恢复数据库提示内存不够报错
1. 现象 点击 ‘restore database’ 控制台报错: 2. 解决措施 a. 进入启动脚本的文件夹 cd odoo/odoo-12.0/输入命令 ./odoo-bin --addons-pathaddons --databaseodoo --db_userodoo --db_passwordodoo --db_hostlocalhost --db_port5432 -i INITb. 刷新页面…...
关于数据提交上传服务端的数据类型以及项目打包上线的流程
1 请求头的类型: content-type; 01: application/json 数据以json格式请求:{"key":"value"} 02: application/x-www.form-urlencoded from表单的数据格式 name"zs"&age12 03 mutipart/form-data…...
儿童悬吊训练系统:改善脑性麻痹儿童平衡感与运动能力的有效途径
脑性麻痹(CP)是一种运动障碍,常常由于早期的运动皮层损伤而引起。这种损伤可能导致姿势、操纵技能和行走能力的差异。平衡控制不良是 CP 患儿面临的一项主要挑战,它可能导致动作控制异常以及步态问题,从而影响日常活动…...
ElasticSearch之文档的存储
写在前面 本文看下文档的存储相关内容。 1:如何确定文档存储在哪个分片? 我们需要确保文档均匀分布在所有的分片中,避免某些部分机器空闲,部分机器繁忙的情况出现,想要实现均匀分布我们可以考虑如下的几种分片路由算…...
在Redhat 7 Linux上安装llama.cpp [ 错误stdatomic.h: No such file or directory]
前期准备 在github上下载llama.cpp或克隆。 GitHub - ggerganov/llama.cpp: LLM inference in C/C git clone https://github.com/ggerganov/llama.cpp.gitcd llama.cpp 执行make命令编译llama.cpp make 在huggingface里下载量化了的 gguf格式的llama2模型。 https:/…...
linux 常用 命令行HTTP客户端
在Linux环境中,命令行HTTP客户端是一种用于发送HTTP请求的工具,它们通常用于测试网站、服务器或API的响应。这些客户端支持各种HTTP方法,如GET、POST、PUT、DELETE等,并允许用户设置请求头、发送数据等。以下是一些常用的命令行HT…...
深入理解@Param注解:用于参数映射的利器
摘要:Param注解在Java开发中被广泛应用,它可以优雅地解决方法参数与SQL语句中占位符的映射问题,提高代码的可读性和可维护性。本文将深入探讨Param注解的背景、使用方法、解决的问题、映射原理,并对使用与不使用Param注解的情况进…...
STM32定时器级联功能实战:如何构建64位定时器
1. 为什么需要64位定时器? 在嵌入式开发中,32位定时器对于大多数应用场景已经足够用了。比如一个72MHz的STM32,32位定时器最大能计时的时长大约是59.6秒(2^32/72MHz)。但在一些特殊场景下,比如需要记录设备…...
Python MCP服务快速接入实战:5个必踩坑点+4行核心代码,今天就能跑通生产环境
第一章:Python MCP服务快速接入实战概览Python MCP(Model Control Protocol)服务为模型调用、生命周期管理与可观测性提供了标准化接口。本章聚焦于在本地开发环境中快速完成 Python 客户端接入,无需修改业务模型代码即可实现服务…...
青蓝送水小程序开发(现成案例)
以下为现成的送水类小程序开发案例及关键功能模块,可结合业务需求调整:核心功能模块用户端:水品分类展示、在线下单、配送地址管理、订单跟踪、在线支付、会员积分系统配送端:订单接收、配送路线规划、状态更新、异常反馈管理后台…...
回归分析中的t检验、F检验和相关系数检验:如何选择与解读(附Python代码示例)
回归分析中的t检验、F检验和相关系数检验:如何选择与解读(附Python代码示例) 在数据分析的实际工作中,回归分析是最基础也最强大的工具之一。无论是预测销售额、分析用户行为,还是评估营销效果,回归模型都能…...
5分钟快速搭建PUBG实时雷达:掌握战场信息的终极指南
5分钟快速搭建PUBG实时雷达:掌握战场信息的终极指南 【免费下载链接】PUBG-maphack-map this is a working copy online-map from jussihi/PUBG-map-hack, use nodejs webserver instead of firebase. 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-maphack-…...
产品经理开需求会必看!2026年5款会议纪要自动生成软件,真香体验散会就出完整纪要
做产品的天天泡需求会,做销售的天天跑客户要整理录音,做学生的天天要整理访谈,不同人对转写工具的需求天差地别——有人要准确率不能漏需求,有人要便宜不能月月大出血,有人要能识别方言听不懂客户说啥也不怕。我测了市…...
新手零困扰:在windows部署openclaw?快马ai生成手把手入门教程
新手零困扰:在Windows部署OpenClaw?快马AI生成手把手入门教程 作为一个刚接触爬虫开发的新手,第一次在Windows系统上部署OpenClaw时,我遇到了不少麻烦。从Python环境配置到各种依赖问题,再到运行第一个爬虫脚本&#…...
实战指南:基于快马平台打造可分发的一键安装包,快速部署个人博客系统
今天想和大家分享一个实战经验:如何用InsCode(快马)平台快速打造一个可分发的一键安装包,实现个人博客系统的秒级部署。整个过程就像搭积木一样简单,特别适合需要快速交付项目的开发者。 项目设计思路 这个一键安装包的核心是一个智能安装脚本…...
图解匈牙利算法:从增广路到最大匹配的完整流程
图解匈牙利算法:从增广路到最大匹配的完整流程 在解决二分图匹配问题时,匈牙利算法以其简洁高效的特性成为经典选择。想象一下面试官与应聘者的配对场景——如何让每个人找到最合适的岗位?这正是匈牙利算法擅长的领域。本文将用可视化方式拆解…...
从销售报表分析到供应链数据优化,SpreadJS 透视表插件全场景应用指南
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
