Jetpack Compose:构建现代Android应用的BottomNavigation

news2024/10/6 18:32:23

Jetpack Compose是Google推出的一种全新的声明式UI框架,它引领了Android开发的新风潮。在这篇博客中,我将详细介绍如何使用Jetpack Compose来构建一个具有底部导航栏(BottomNavigation)的现代Android应用。


        首先,让我们快速了解一下什么是BottomNavigationBottomNavigation是一种在移动应用中常见的导航模式,它允许用户在三到五个顶级目标间进行切换。在Jetpack Compose中,我们可以使用BottomNavigationBottomNavigationItem两个composable函数来轻松创建一个底部导航栏。

下面是一个基础的BottomNavigation的实现方式:

@Composable
fun BottomNavigationDemo() {
    val items = listOf("Home", "Search", "Profile")
    var selectedItem by remember { mutableStateOf("Home") }

    BottomNavigation {
        items.forEach { item ->
            BottomNavigationItem(
                label = { Text(item) },
                icon = { Icon(Icons.Default.Home, contentDescription = null) },
                selected = selectedItem == item,
                onClick = { selectedItem = item }
            )
        }
    }
}

在上面的例子中,我们首先定义了三个BottomNavigationItem,每一个都有一个文本标签和一个图标。当某一个item被点击时,selectedItem状态会被更新,界面也会重新绘制。

然而,仅仅有一个底部导航栏是不够的,我们还需要根据选中的item显示不同的内容。在Jetpack Compose中,我们可以使用响应式编程的思想,根据selectedItem的状态来动态显示内容。

@Preview
@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
@Composable
fun BottomNavigationExample() {
    val items = listOf("Home", "Search", "Profile")

    var selectedItem by remember {
        mutableStateOf("Home")
    }
    Scaffold(bottomBar = {
        BottomNavigation {
            items.forEach { item ->
                BottomNavigationItem(label = { Text(text = item) }, icon = {
                    Icon(Icons.Default.Home, contentDescription = null)
                }, selected = selectedItem == item, onClick = { selectedItem = item })
            }
        }
    }) {
        when (selectedItem) {
            "Home" -> Text("Home Screen")
            "Search" -> Text("Search Screen")
            "Profile" -> Text("Profile Screen")
        }
    }

}

 

在上面的例子中,我们使用了Scaffold这个composable函数,将BottomNavigation设置为了底部导航栏,然后根据selectedItem来动态显示不同的屏幕。

Jetpack Compose的美妙之处就在于,你可以根据你的需求来自定义你的UI。例如,你可以自定义你的BottomNavigationItem的外观,包括选中和未选中时的颜色,显示徽章等。你还可以使用动画来使你的界面更加生动。

总的来说,使用Jetpack Compose来构建底部导航栏是一种简单和高效的方式。随着Jetpack Compose的发展,我相信它将在未来的Android开发中扮演更加重要的角色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++学习】内联函数 | nullptr空指针 | 初步认识面向对象 | 类访问限定符 | 封装 | 类对象的内存对齐

写在前面: 上一篇文章我介绍了引用和auto相关的知识, 如果有兴趣的话可以去看看:http://t.csdn.cn/j6jsI 这篇文章大概能够讲完C入门的一些语法,开始类和对象的学习之旅。 目录 写在前面: 1. 内联函数 2. nullp…

用Python带你制作小时候玩的“大富翁”(文末赠书)

名字:阿玥的小东东 学习:Python、C/C 主页链接:阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 首先 接下来需要定义各种类型的物业,包括普通物业、铁路、公用事业等等。 接下来需…

【Spring 】项目创建和使用

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 谈起Java 圈子里的框架,最年长最耀眼的莫过于 Spring 框架啦,如今已成为最流行、最广泛使用的Java开发框架之一。不知道大家有没有在使用 Spring 框架的时候思考过这…

强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)

【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧…

Spring Cloud - Nacos 注册发现、分级模型、配置集群、环境隔离、原理

目录 一、Nacos 安装和配置 二、Nacos 服务注册发现 2.1、将服务注册到 nacos 中 2.2、执行效果 三、Nacos 的服务分级模型及配置 3.1、分级模型 3.2、配置集群 3.3、配置 Nacos 负载均衡策略 3.4、Nacos 服务实例的权重设置 3.5、环境隔离——namespace 四、Nacos注…

真实企业做自动化测试做法,从测试用例到测试报告...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 首先,…

SAP MM 组织结构配置

1.定义公司代码 创建公司代码一般来说是财务去配置,但是我们需要去有一个基本的了解,这样,你才能理清公司代码和MM 组织的关系 配置:SAP IMG Enterprise Structure -》Definition -> Financial Accounting -> Edit, Copy, …

深度学习(26)——YOLO系列(5)

深度学习(26)——YOLO-v7(5) 文章目录 深度学习(26)——YOLO-v7(5)絮絮叨叨1. conv和BN的融合2. 3*3卷积的替换(1)1*1卷积有什么作用?&#xff08…

解决方案 | 照明行业数字化营销CRM平台

“数字中国”作为二十大报告的“关键词”,也成为各行各业的高质量发展的主旋律,历史悠久的中国照明产业也积极拥抱“数字化”,以驱动高质量发展 。作为照明行业的领军企业,某照明行业客户很早就意识到企业数字化转型的重要性&…

Spring事务源码详解-spring原码(二)

上篇文章介绍了事务开启,前面介绍了解析adviors。 spring事务源码详解-spring原码(一)https://blog.csdn.net/ke1ying/article/details/131360060 事务源码 先从缓存里获取,主要是判断循环依赖是否创建动态代理 进去wrapIfNeces…

【MOOC 作业】第3章 传输层

不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) ‍主机甲和主机乙之间已建立一个 TCP 连接,TCP 最大段长度为 1000 字节,若主机甲的当前拥塞窗口为 5000 字节,在主机甲向主机乙连接发送 2 个最大段后,成功收到主机乙发…

Java微服务金融项目智牛股 项目简介与金融知识介绍及技术特点

项目简介 金融交易平台服务于金融衍生产品, 包含外汇、贵金属、期货、股票。 各产品具有不同属性与交易规则, 本项目对标MT4等大型交易平台, 遵循FIX全球最广泛的金融市场通用协议。 实现从证券注册开户、行情订阅与呈现, 股票撮合…

JAVA 日期类Date SimpleDateFormat Calendar

1、Date日期类 类 Date 表示一个特定的瞬间,精确到毫秒 1.1 Date的构造函数 Date() 分配一个 Date 对象,以表示分配它的时间(精确到毫秒) Date(long date) 分配一个 Date 对象,表示自从标准基准时间起指定时间的毫秒数…

2023最新AI创作系统/ChatGPT商业运营版网站程序源码+支持GPT4+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

2023最新AI创作系统/ChatGPT商业运营版网站程序源码支持ai绘画支持GPT4.0实时语音识别输入文章资讯发布功能用户会员套餐免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问:程序已经支持G…

论洗碗哥在CSDN摸滚打爬的256个日夜

目录 机缘 收获 成就 憧憬 机缘 创作初心了为了记录一下自己的日常学习过程,方便自己日后去总结,或者遇到类似的问题的时候就可以翻阅自己的文章了。也可以加深自己的印象。其实一开始我是一个不太善于总结的人,机缘之下,听到…

机器学习之PCA算法

目录 PCA算法 PCA目标 PCA原理推导 基于最大可分性推导 基于最近重构误差推导 PCA算法流程 PCA优点 PCA缺点 基于PCA的人脸识别 PCA算法 PCA,即主成分分析(Principal Component Analysis),是一种常用的降维技术&#x…

【博客674】警惕Prometheus 中的重复样本和无序时间戳错误

警惕Prometheus 中的重复样本和无序时间戳错误 1、场景 您的 Prometheus 服务器日志中是否遇到过以下错误? "Error on ingesting out-of-order samples" "Error on ingesting samples with different value but same timestamp" "dupli…

2023最全 Java 高频面试合集,掌握这些你也能进大厂

进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全,对于 Java 后端的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很…

内网隧道代理技术(六)之 PowerCat反弹Shell

PowerCat反弹Shell PowerCat介绍 PowerCat是一个powershell写的tcp/ip瑞士军刀,看一看成ncat的powershell的实现,然后里面也加入了众多好用的功能,如文件上传,smb协议支持,中继模式,生成payload&#xff…

几分钟带你快速了解SpringBoot框架理论知识!

1.什么是SpringBoot SpringBoot其实就是Spring的子项目。它简化了Spring的开发难度,舍弃了一切可以舍弃的xml配置文件,提供了各种启动器,让程序员上手更快,节省了开发时间。 2.SpringBoot的优点 SpringBoot其实就是对Spring的缺…