当前位置: 首页 > news >正文

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提供了两个可组合函数来实现底部导航栏,它们是NavigationBarNavigationBarItem。本章回中将详细它们的使用的方法。

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中弹出菜单相关的内容&#xff0c;本章回中将介绍 底部导航栏。闲话休提&#xff0c;让我们一起Talk …...

MATLAB - excel 读取

matlab中excel 读取 1. 写入excel文件 - xlswrite2. 读取excel文件 - xlsread 1. 写入excel文件 - xlswrite xlswrite(filename,A,sheet,xlRange) % 写入字符串 % 注意事项&#xff1a;Str需要是Cell格式&#xff0c;否则一个字母占一格 % Str {‘abc’}&#xff1b; 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月青少年软件编程&#xff08;C 语言&#xff09; 等级考试试卷&#xff08;八级&#xff09; 第 1 题 最短路径问题 平面上有n个点&#xff08;n<100&#xff09;&#xff0c;每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线&#xff0…...

MS17010(永恒之蓝)漏洞实战

曾因苦难多壮志&#xff0c;不教红尘惑坚心。 工具检测 实战过程 使用搜索命令&#xff0c;搜索ms17_010 search ms17_010 搜索网段中主机漏洞 use auxiliary/scanner/smb/smb_ms17_010 照例&#xff0c;show options 看一下配置 设置网段&#xff0c;run运行就行了 使用攻…...

ROS自学笔记十三:VScode的介绍和安装

Visual Studio Code&#xff08;简称VS Code&#xff09;是一款由Microsoft开发的免费、轻量级、开源的集成开发环境&#xff08;IDE&#xff09;。它支持多种编程语言&#xff0c;并且具有丰富的扩展系统&#xff0c;使得用户可以根据自己的需求自定义和扩展功能。 以下是VS …...

操作系统【OS】微内核

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

Ubuntu docker安装mysql

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

VSCode使用记录

一、安装 从官网 https://code.visualstudio.com 下载相应安装包 二、扩展&#xff1a;商店 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 , 转义字符串&#xff08; Escape Sequence &#xff09; 字母前面加上捺斜线 "" 来表示常见的那些不能显示的 ASCII 字符 . 称为转义字符 . 如 \0,\t,\n 等&#xff0c;就称为转 义字…...

我的电子萝卜刀火了吗?

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

git 查看本地秘钥

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

【TensorFlow1.X】系列学习笔记【入门二】

【TensorFlow1.X】系列学习笔记【入门二】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【入门二】前言神经网络的参数神经网络的搭建前向传播反向传播 总结 前言 学习了张量、…...

详解一下HTML的语义化标签

目录 什么是语义化标签: HTML5的语义化元素的优点: HTML5的语义化元素的缺点: 来个例子: 语义化标签有那些: 什么是语义化标签: 语义化标签是HTML的一种特性&#xff0c;其核心目标是让标签具有特定的意义。它们的存在不仅帮助开发者更好地理解文档的结构&#xff0c;也让…...

C++11的for循环

在C03/98中&#xff0c;不同的容器和数组&#xff0c;遍历的方法不尽相同&#xff0c;写法不统一&#xff0c;也不够简洁&#xff0c;而C11基于范围的for循环以统一&#xff0c;简洁的方式来遍历容器和数组&#xff0c;用起来更方便了。 for循环的新用法 #include <iostre…...

代码随想录算法训练营第六十天| 739. 每日温度、 496.下一个更大元素 I

代码随想录算法训练营第六十天| 739. 每日温度、 496.下一个更大元素 I 739. 每日温度496.下一个更大元素 I 今天的题都能看懂&#xff0c;做了一个小时 739. 每日温度 题目链接&#xff1a;739. 每日温度 文章链接 状态&#xff1a;看视频能看懂&#xff0c;还是要多练。 代码…...

2.4_3死锁的处理策略---避免死锁

...

13.3测试用例进阶

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

[云原生1] Docker网络模式的详细介绍

1. Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c; Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c; 同时Docker网桥是每个容器的默认…...

YOLOv8-Pose实战:从Labelme标注到模型训练的数据流水线构建

1. 环境准备与工具安装 在开始构建YOLOv8-Pose数据流水线之前&#xff0c;我们需要准备好开发环境和必要的工具。我推荐使用Python 3.8环境&#xff0c;这个版本在兼容性和稳定性方面表现最好。首先安装Labelme标注工具&#xff0c;这个工具在关键点标注领域几乎是行业标准&am…...

星穹铁道跃迁记录导出工具:三分钟掌握您的抽卡数据分析秘籍

星穹铁道跃迁记录导出工具&#xff1a;三分钟掌握您的抽卡数据分析秘籍 【免费下载链接】star-rail-warp-export Honkai: Star Rail Warp History Exporter 项目地址: https://gitcode.com/gh_mirrors/st/star-rail-warp-export 在《崩坏&#xff1a;星穹铁道》的旅途中…...

5个步骤掌握赛博朋克2077存档修改:从新手到高手的完整指南

5个步骤掌握赛博朋克2077存档修改&#xff1a;从新手到高手的完整指南 【免费下载链接】CyberpunkSaveEditor A tool to edit Cyberpunk 2077 sav.dat files 项目地址: https://gitcode.com/gh_mirrors/cy/CyberpunkSaveEditor 你是否在夜之城中遇到了角色成长瓶颈&…...

Obsidian Excel插件终极指南:如何用3个步骤实现笔记与表格的无缝整合

Obsidian Excel插件终极指南&#xff1a;如何用3个步骤实现笔记与表格的无缝整合 【免费下载链接】obsidian-excel 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-excel 还在为Obsidian笔记中的表格管理而烦恼吗&#xff1f;Obsidian Excel插件为你带来了一场…...

StreamCap:免费开源的多平台直播录制终极指南

StreamCap&#xff1a;免费开源的多平台直播录制终极指南 【免费下载链接】StreamCap Multi-Platform Live Stream Automatic Recording Tool | 多平台直播流自动录制客户端 基于FFmpeg 支持监控/定时/转码 项目地址: https://gitcode.com/gh_mirrors/st/StreamCap 在…...

测试人员的极致追求,如何做到不漏测?

什么是漏测&#xff1f; 具体地说&#xff0c;什么是测试漏测&#xff1f;测试漏测是指软件产品在测试结束后出现了在测试过程中没有被发现的bug。 我们知道&#xff0c;漏测是每一个软件测试者最头疼的事&#xff0c;一旦出现漏测&#xff1a; 首先给客户带来了非常不好的影…...

2026 AI智能体实测:企业落地选型避坑指南

2026年第一季度&#xff0c;AI智能体&#xff08;AI Agent&#xff09;市场完成深度洗牌&#xff0c;行业格局趋于清晰。企业对AI的需求已彻底告别“写文案、做问答”的浅层交互&#xff0c;转向跨系统自动化、无侵入式落地、可量化降本增效的实战场景。作为深耕企服数字化测评…...

ncmdump终极指南:免费解锁网易云音乐NCM格式,让音乐无处不在

ncmdump终极指南&#xff1a;免费解锁网易云音乐NCM格式&#xff0c;让音乐无处不在 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾遇到过这样的困扰&#xff1a;在网易云音乐精心收藏的歌曲&#xff0c;想在车载音响播放却…...

Phi-4-mini-reasoning教育落地案例:在线考试系统自动阅卷与评分

Phi-4-mini-reasoning教育落地案例&#xff1a;在线考试系统自动阅卷与评分 1. 项目背景与挑战 在线教育平台面临的最大痛点之一就是大规模考试的阅卷工作。传统人工阅卷方式存在几个明显问题&#xff1a; 效率低下&#xff1a;一位老师每天最多批改200-300份试卷成本高昂&a…...

nli-MiniLM2-L6-H768基础教程:从BERT到MiniLM2的NLI模型演进

nli-MiniLM2-L6-H768基础教程&#xff1a;从BERT到MiniLM2的NLI模型演进 1. 认识自然语言推理(NLI) 自然语言推理(Natural Language Inference)是自然语言处理中的一项基础任务&#xff0c;它需要判断两个句子之间的逻辑关系。想象一下&#xff0c;这就像老师在批改作业时&am…...