Jetpack:013-Jetpack底部导航栏

news/2024/11/24 4:31:57/

文章目录

  • 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中底部导航栏相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!


http://www.ppmy.cn/news/1166513.html

相关文章

kubernetes kuboard 端口

前言 一般安装kubernetes的教程都会教大家首先关闭防火墙&#xff0c;测试环境如此倒是没问题&#xff0c;到了生产环境就要考虑安全性问题了&#xff0c;所以服务器的防火墙依然需要保持最小策略开放&#xff0c;确保服务器的运行安全。 kubernetes端口 参考文档&#xff1…

【LeetCode热题100】--55.跳跃游戏

55.跳跃游戏 方法&#xff1a;贪心 对于数组的任意一个位置y&#xff0c;如何判断它是否可以到达&#xff1f; 只要存在一个位置x,它本身可以到达&#xff0c;并且它跳跃的最大长度为xnums[x]&#xff0c;这个值大于等于y&#xff0c;即xnums[x]≥y&#xff0c;那么这个位置y…

我们不一样①

我们不一样① 从hello world开始 别人的hello world​​ 我们的hello world 代码展示 #include <stdio.h> int main(){printf("\033[31mhello world\033[0m"); getchar();return 0; } 此处用了 ANSI转义序列 ANSI转义序列是一种带内信号的转义序列标准&am…

autoware.ai中检测模块lidar_detector caffe

lidar_apollo_cnn_seg_detect模块&#xff1a;该模块主要是调用百度apollo的目标分割。 1.需要安装caffe进行实现: caffe安装步骤&#xff1a; git clone https://github.com/BVLC/caffecd caffe && mdkir build && cd buildcmake ..出现报错&#xff1a; CM…

【试题031】C语言关系运算符和逻辑非例题

1.题目&#xff1a; 设int p;&#xff0c;与if(p0)等价的是 () A if(p) B if(!p) if(p1) Dif(p!0) 2.分析&#xff1a; [ ] if中的条件是p0为真&#xff0c;也就是说p0[ ] 那么&#xff01;p1,逻辑非就是将结果取反的操作[ ] p0也就是p≠1 3.截图&#xff1a;

Linux 进程操作

文章目录 进程的基本知识进程pid进程常用的函数 forkwait和waitpidexec函数簇system函数信号处理signal函数Linux的SIGUSR1SIGUSR2 讨论 进程的基本知识 一个程序的执行称为一个进程&#xff0c;所有的代码都是在进程中执行的&#xff0c;进程是操作系统资源分配的基本单位。 在…

高校教务系统登录页面JS分析——华南农业大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密码加…

多测师肖sir_高级金牌讲师___ui自动化之selenium001

一、认识selenium &#xff08;1&#xff09;selenium是什么&#xff1f; a、selenium是python中的一个第三方库 b、Selenium是一个应用于web应用程序的测试工具&#xff0c;支持多平台&#xff0c;多浏览器&#xff0c;多语言去实现ui自动化测试&#xff0c;我们现在讲的Sel…