Jetpack:013-Jetpack底部导航栏
文章目录
- 1. 概念介绍
- 2. 使用方法
- 2.1 NavigationBar
- 2.2 NavigationBarItem
- 3. 示例代码
- 3.1 代码和注释
- 3.2 代码难点
- 3.3 运行效果
- 4. 内容总结
我们在上一章回中介绍了Jetpack中弹出菜单相关的内容,本章回中将介绍 底部导航栏。闲话休提,让我们一起Talk Android Jetpack吧!
1. 概念介绍
我们在本章回中介绍的底部导航栏就是位于屏幕最下方的内容,它通常包含多个图标,点击图标后可以跳转到不同页面,因此叫作底部导航栏。
Jetpack提供了两个可组合函数来实现底部导航栏,它们是NavigationBar
和NavigationBarItem
。本章回中将详细它们的使用的方法。
2. 使用方法
2.1 NavigationBar
该可组合函数主要用来当作容器,它可包含导航栏中的内容,主要是NavigationBarItem
。它提供了相关的参数来设置导航栏,详细如下:
- containerColor参数:主要用来设置导航栏的背景颜色;
- contentColor参数:主要用来设置导航栏中内容的颜色;
- tonalElevation参数:主要用来设置阴影的效果;
我在实践中发现第二个参数没有效果,第三个参数的效果不是很明显,因此该函数可操控的内容比较少。
2.2 NavigationBarItem
- icon参数:主要用来控制导航栏中的图标;
- label参数:主要用来控制导航栏中的文本;
- selected参数:主要用来控制当前内容是否被选中;
- onClick参数:主要用来响点击事件,和Button中同名参数的用法相同;
- colors参数:主要用来控制Icon和label的颜色,包含选择和未选择时的颜色;
3. 示例代码
3.1 代码和注释
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CustomBottomNavigationBar() {//定义一个状态值在选择bar时使用var selectedItem by remember { mutableStateOf(0) }val items = listOf<NavigationItem>(NavigationItem("Person",Icons.Default.Person),NavigationItem("Home",Icons.Default.Home),NavigationItem("Setting",Icons.Default.Settings),)NavigationBar(containerColor = Color.Blue,contentColor = Color.Green, //这个颜色不起作用) {items.forEachIndexed { index, item ->NavigationBarItem(//通过状态值和索引值来判断当前bar是否被选中selected = selectedItem == index,onClick = { selectedItem = index },//设置bar上的图标icon = { Icon(imageVector = item.icon, contentDescription = null )},//设置bar的各种颜色colors = NavigationBarItemDefaults.colors(selectedIconColor = Color.Cyan,selectedTextColor = Color.Cyan,//这个颜色最好和NavigationBar的containerColor颜色保持一致,不然会在Icon外层显示一个背景颜色indicatorColor = Color.Blue,unselectedIconColor = Color.Yellow,unselectedTextColor = Color.Yellow,),//设置bar上的文字label = { Text(text = item.text) })}}
}
3.2 代码难点
上面的示例代码中有一个难点:点击不同的图标时自动切换图标。具体点说就是点击导航栏中的某个图标时被点击图标处于选中状态,其它没有点击的图标处于未选中状态。
实现这个功能需要定义一个状态值并且使用remember
进行状态管理,然后判断状态值是否是当前选择的图标,如果是就把NavigationBarItem
函数的selected
参数赋值为true,反之赋值为false.这样就实现了该功能。我们这么说可能比较抽象,大家可以参考示例代码,代码中有详细的注释。
3.3 运行效果
我们把底部导航栏所有的代码封装成了一个可组合函数,这样方便管理代码。下面是程序的运行效果图。我建议大家自己动手去实践,特别是切换图标的功能。
4. 内容总结
最后,我们对本章回的内容做一个总结:
- 底部导航栏位于屏幕最下方,主要用来通过图标切换不同的页面;
- 底部导航栏通过NavigationBar和NavigationBarItem可组合函数实现;
- 底部导航栏的图标、文字以及它们的颜色都是通过可组合函数的参数来修改;
- 底部导航栏点击图标时切换图标的功能需要通过状态管理和可组合函数的参数一起实现;
看官们,关于Jetpack中底部导航栏相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
相关文章:

Jetpack:013-Jetpack底部导航栏
文章目录 1. 概念介绍2. 使用方法2.1 NavigationBar2.2 NavigationBarItem 3. 示例代码3.1 代码和注释3.2 代码难点3.3 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中弹出菜单相关的内容,本章回中将介绍 底部导航栏。闲话休提,让我们一起Talk …...
MATLAB - excel 读取
matlab中excel 读取 1. 写入excel文件 - xlswrite2. 读取excel文件 - xlsread 1. 写入excel文件 - xlswrite xlswrite(filename,A,sheet,xlRange) % 写入字符串 % 注意事项:Str需要是Cell格式,否则一个字母占一格 % Str {‘abc’}; xlswr…...

【AIGC核心技术剖析】Hotshot-XL 一种 AI 文本转 GIF 模型(论文 + 代码:经过训练可与Stable Diffusion XL一起使用)
Hotshot-XL 是一种 AI 文本转 GIF 模型,经过训练可与Stable Diffusion XL一起使用。 Hotshot-XL 可以使用任何经过微调的 SDXL 模型生成 GIF。这意味着两件事: 您将能够使用您可能想要使用的任何现有或新微调的 SDXL 模型制作 GIF。 如果您想制作个性化主题的 GIF,您可以…...
2023年9月青少年软件编程(C 语言) 等级考试试卷(八级)
2023年9月青少年软件编程(C 语言) 等级考试试卷(八级) 第 1 题 最短路径问题 平面上有n个点(n<100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线࿰…...

MS17010(永恒之蓝)漏洞实战
曾因苦难多壮志,不教红尘惑坚心。 工具检测 实战过程 使用搜索命令,搜索ms17_010 search ms17_010 搜索网段中主机漏洞 use auxiliary/scanner/smb/smb_ms17_010 照例,show options 看一下配置 设置网段,run运行就行了 使用攻…...
ROS自学笔记十三:VScode的介绍和安装
Visual Studio Code(简称VS Code)是一款由Microsoft开发的免费、轻量级、开源的集成开发环境(IDE)。它支持多种编程语言,并且具有丰富的扩展系统,使得用户可以根据自己的需求自定义和扩展功能。 以下是VS …...

操作系统【OS】微内核
基本概念 微内核结构将操作系统划分为两大部分:微内核多个服务器微内核包含: 与硬件处理紧密相关的部分一些较基本的功能客户和服务器间的通信客户与服务器之间是借助微内核提供的消息传递机制来实现交互的 基本功能 进程管理 进程的通信、切换、调度…...

Ubuntu docker安装mysql
本文介绍如何在docker中安装mysql,之前有尝试过先在docker中安装一个ubuntu到镜像,然后进去再去安装mysql相关的东西,发现不行,这边整理一下一个可行的方式。 在下载镜像的时候,直接下载mysql镜像。 1.搜索镜像 doc…...

VSCode使用记录
一、安装 从官网 https://code.visualstudio.com 下载相应安装包 二、扩展:商店 Chinese (Simplified) (简体中文) Language Pack for Visual Studio CodeLive Serveropen in browserGitLens — Git superchargedRemote - SSHPrettier - Code formatterESLintpxt…...

正则表达式之学习笔记
正则表达式学习笔记 一、概念二、正则表达式组成三、常见的正则表达式3.1 .匹配任意字符3.2 * 匹配前一个字符的0个或多个实例3.3 ^ 匹配输入字符串的开头3.4 $ 匹配行尾3.5 [] 匹配字符集合\<\> 精确匹配符号 一、概念 正则表达式是由一系列特殊字符组成的字符串&#…...

Java String类
字符串转义符号为 \ 常见的转义字符 转移字符对应的英文是 escape character , 转义字符串( Escape Sequence ) 字母前面加上捺斜线 "" 来表示常见的那些不能显示的 ASCII 字符 . 称为转义字符 . 如 \0,\t,\n 等,就称为转 义字…...

我的电子萝卜刀火了吗?
引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 笔者在上一篇文章《萝卜刀真的太危险了,于是我用Cocos做了一个》中说到因女儿从学校回来之后想要我给她买一把萝卜刀被我拒绝,但是又想要让她体验一下,因此用Cocos…...

git 查看本地秘钥
第一步: 1,打开终端或者命令行窗口,输入一下命令: cd ~/.ssh进入ssh目录 2,查看该目录下的所有文件,输入以下命令: ls -al该命令将显示ssh目录下的所有文件,包括秘钥文件和配置文件,如果不存…...

【TensorFlow1.X】系列学习笔记【入门二】
【TensorFlow1.X】系列学习笔记【入门二】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【入门二】前言神经网络的参数神经网络的搭建前向传播反向传播 总结 前言 学习了张量、…...
详解一下HTML的语义化标签
目录 什么是语义化标签: HTML5的语义化元素的优点: HTML5的语义化元素的缺点: 来个例子: 语义化标签有那些: 什么是语义化标签: 语义化标签是HTML的一种特性,其核心目标是让标签具有特定的意义。它们的存在不仅帮助开发者更好地理解文档的结构,也让…...

C++11的for循环
在C03/98中,不同的容器和数组,遍历的方法不尽相同,写法不统一,也不够简洁,而C11基于范围的for循环以统一,简洁的方式来遍历容器和数组,用起来更方便了。 for循环的新用法 #include <iostre…...
代码随想录算法训练营第六十天| 739. 每日温度、 496.下一个更大元素 I
代码随想录算法训练营第六十天| 739. 每日温度、 496.下一个更大元素 I 739. 每日温度496.下一个更大元素 I 今天的题都能看懂,做了一个小时 739. 每日温度 题目链接:739. 每日温度 文章链接 状态:看视频能看懂,还是要多练。 代码…...

13.3测试用例进阶
一.测试对象划分 1.界面测试(参考软件规格说明书和UI视觉稿) a.什么是界面 1)WEB站(浏览器) 2)app 3)小程序 4)公众号 b.测试内容 1)界面内容显示的一致性,完整性,准确性,友好性.比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示. 2)验证整个界面布局和排版…...

[云原生1] Docker网络模式的详细介绍
1. Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0), Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP, 同时Docker网桥是每个容器的默认…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...