Android Jetpack Compose - 探索 BottomSheet

news2024/11/20 18:36:39

Jetpack Compose 是一种现代化的、声明式的 UI 工具集,它使得 Android 的 UI 开发变得更加简单和直观。在这篇文章中,我们将要探索其中的一种常用 UI 元素 —— 底部抽屉(BottomSheet)。


 一、什么是 BottomSheet?

在 Material Design 中,底部抽屉是一种从屏幕底部滑出的面板,可以用来显示内容或者提供与用户相关的操作。在 Compose 中,我们可以使用 ModalBottomSheetLayout 来创建底部抽屉。

二、开始使用 BottomSheet

首先,我们需要创建一个 ModalBottomSheetState 的实例,它用来保存和控制底部抽屉的状态。

val sheetState = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden)

val coroutineScope =rememberCoroutineScope()

 然后,我们可以创建一个 ModalBottomSheetLayout,它有两个参数,一个是底部抽屉的内容,一个是主内容。

@OptIn(ExperimentalMaterialApi::class)
@Preview
@Composable
fun BottomSheet(){
    val sheetState = rememberModalBottomSheetState( ModalBottomSheetValue.Hidden )
    val coroutineScope =rememberCoroutineScope()

    ModalBottomSheetLayout(sheetState=sheetState,sheetContent = {
        Text(text = "这是底部抽屉的内容",Modifier.padding(16.dp))
    } ) {
        Text(text = "点击我显示底部抽屉", Modifier.clickable { coroutineScope.launch { sheetState.show()} })
    }


}

这样,当我们点击主内容时,底部抽屉就会显示出来。

三、控制 BottomSheet

我们可以使用 ModalBottomSheetState 提供的 showhide 方法来控制底部抽屉的显示和隐藏。

val coroutineScope = rememberCoroutineScope()

// 显示底部抽屉
coroutineScope.launch {
    sheetState.show()
}

// 隐藏底部抽屉
coroutineScope.launch {
    sheetState.hide()
}

 我们也可以使用 isVisible 属性来获取底部抽屉的显示状态。

val isSheetVisible = sheetState.isVisible

四、自定义 BottomSheet

ModalBottomSheetLayout 提供了一些参数,可以用来自定义底部抽屉的外观和行为。

  • sheetElevation: 底部抽屉的海拔高度。
  • sheetShape: 底部抽屉的形状。
  • sheetBackgroundColor: 底部抽屉的背景颜色。
  • sheetContentColor: 底部抽屉的内容颜色。
  • scrimColor: 遮罩层的颜色。
@OptIn(ExperimentalMaterialApi::class)
@Preview
@Composable
fun BottomSheet(){
    val sheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden)
    val coroutineScope= rememberCoroutineScope()
    ModalBottomSheetLayout(
        sheetState = sheetState,
        sheetElevation = 16.dp,
        sheetShape = RoundedCornerShape(16.dp,16.dp),
        sheetBackgroundColor = Color.Yellow,
        sheetContentColor = Color.Red,
        scrimColor = Color.Black.copy(alpha = 0.32f),
        sheetContent = {
            Text(text = "这是底部抽屉的内容",Modifier.padding(16.dp))
        }
    ){
        Text(text = "点击我显示底部抽屉",Modifier.clickable { coroutineScope.launch { sheetState.show() } })
    }
}

 Jetpack Compose 的底部抽屉提供了丰富的自定义选项,并且易于使用,让我们可以方便地在应用中添加和控制底部抽屉。

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

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

相关文章

速度与技能的较量!飞桨黑客松 OpenVINO™ 任务获奖者经验分享

点击蓝字 关注我们,让开发变得更有趣 作者 | Fisher 排版 | 李擎 速度与技能的较量! 飞桨黑客松 OpenVINO™ 任务获奖者经验分享 前言/ 获奖经验分享,比赛轻松拿捏, 千元奖金拿到手软! 黑客松活动介绍 飞桨黑客马拉松是一项兼具编…

Vuex —— 同步和异步请求

上一篇讲到 Vuex 状态管理的内容,先来简单的回顾一下 Vuex ,Vuex 中有五个核心属性:state 、getter、mutation、action、module 。state: 存放数据状态,不能被直接的修改;getter: 基于 state 的计算属性;mu…

kaggle注册时出现一排“Captcha must be filled out.”

kaggle网址:Kaggle: Your Home for Data Science 想去kaggle下载一份数据,但是出现了一排红色的英文:(真是学习之路哪哪都是阻碍哭唧唧) ​ 出现该问题的原因:必须填写(图片)验证码,可是它没出…

长期不关路由器网速会变慢?一文读懂

如果把现代人最烦的十件事列一个清单,那么网速慢肯定其中一项。看剧的时候画面在转圈,玩游戏的时候角色在卡顿,真是让人非常恼火。 最近我家的网速也比刚安上网时慢了很多,看网上的说法是路由器太久没关了,应该天天关闭…

RESTful API是什么?

82. RESTful API是什么? 当我们构建应用程序或者开发Web服务时,常常需要提供一组接口供客户端访问和使用。RESTful API是一种常见的设计风格,它通过使用HTTP协议和一组规范的设计原则,提供了一种统一、可扩展和可维护的方式来构建…

2023金九银十Java基础-中级-高级面试题汇总(涵盖所有Java核心面试知识点)

寒冬来临,虽受眼前挫折,但咱程序猿(媛)也不能放弃啊!也许这次秋招不是很理想,但是没得关系啊,再过几个月就开始备战2023年的金九银十了呀,现在着手准备,既是给自己的秋招…

机器学习评估与度量指标

这里的内容主要包括:性能度量、比较检验和偏差与方差。在上一篇文章中,我们解决了评估学习器泛化性能的方法,即用测试集的"测试误差"作为"泛化误差"的近似,当我们划分好训练/测试集后,那如何计算&…

《Opencv3编程入门》学习笔记—第十章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第十章 角点检测 一、Harris角点检测 (一)兴趣点与角点 1、图像特征类型: 边缘角点(感兴趣点)斑点&#xf…

在pycharm上导出Anaconda3的环境配置文件

目录 1.原理: ​2.亲身实践: 1.原理: 要在PyCharm中导出Anaconda3环境的配置文件,可以使用conda命令行工具来完成。请按照以下步骤进行操作: 打开PyCharm,并确保项目使用的是Anaconda3环境。 在PyCha…

【小程序】如何手动绘制分享用的图片

上一篇【小程序】如何实现滑动翻页中介绍了如何在小程序中实现上下滑动翻页的效果。 如果要给这个产品增加一个生成图片用于分享到朋友圈的功能,又该如何实现呢? 先来看一下最终的效果图: 首先,新建一个页面(page&am…

vue+elementui实现英雄联盟道具城

目录 一、效果图 1.首页 2.商品列表、分类 二、实现重点讲解 1.首页轮播图 1.1技术实现: 1.2.鼠标聚焦切换图片事件 2.首页tab切换 3.商品列表实现 三、项目结构说明 四、总结 一、效果图 1.首页 项目与官方效果没有太大差异: 游戏导航&#xff1…

windows上VMware虚拟机彻底卸载详细教程

VMware虚拟机彻底卸载 一、彻底卸载过程1.1 停止VMware服务1.2 结束vmware任务1.3 开始卸载VMware1.4 删除注册表信息1.5 删除安装目录 二、vmware 安装教程三、vmware 使用教程 回到目录   回到末尾 一、彻底卸载过程 卸载之前,需要先关闭VMware相关的后台服务…

高速公路智慧稽核常用技术及发展方向浅析

交通运输部数据显示,截至2021年末,全国收费公路里程达18.76万公里,其中高速公路16.12万公里,占比高达85.9%,高速公路费用收缴的重要性尤为凸显。 收费系统作为高速公路的三大机电系统之一,在高速费用的收取…

【Java面试题】框架篇——Spring

文章目录 什么是Spring框架?Spring框架有哪些主要模块?Spring有几种配置方式?Spring框架中的单例Beans是线程安全的么?Spring 框架中都用到了哪些设计模式?★★★Spring AOP在实际项目中的应用★★★阐述一下Bean的生命…

使用 Transformers 为多语种语音识别任务微调 Whisper 模型

本文提供了一个使用 Hugging Face 🤗 Transformers 在任意多语种语音识别 (ASR) 数据集上微调 Whisper 的分步指南。同时,我们还深入解释了 Whisper 模型、Common Voice 数据集以及微调等理论知识,并提供了数据准备和微调的相关代码。如果你想…

django-vue-admin 运行记录

django-vue-admin 运行记录 1. 安装 ubuntu-20.04.6 桌面版 ubuntu-20.04.6-desktop-amd64.iso 桌面版本 桌面版的目的是 有浏览器可以看 django vue 的localhost网页。 用server版,需要用别的机器看,别的机器在权限上可能有问题。 sudo apt install …

ChatGLM2-6B-Int4本地部署

原文链接:http://wangguo.site/posts/9d8c1768.html ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本 GitHub地址:https://github.com/THUDM/ChatGLM2-6B 1、先看效果 2、本地部署 部署环境 wsl2-ubuntu22.04 LTS-----------------------…

计网简答题

答案不保证正确性,仅供参考。 1.有如图所示的以太网,每个交换机的名字及接口号、主机的名字及MAC地址都标明在图中。网络初启动时,两个交换机的转发表都为空,接着先后进行以下MAC帧传输:H1→H5,H3→H2&…

PG系列5:PG体系结构

文章目录 一. PG体系结构1.1 PG的体系结构概述1.2 PostgreSQL进程概述 二. PG内存结构三. PostgreSQL进程3.1 后台进程3.2 后端进程(backend)或服务器进程3.3 用户进程或客户端进程3.4 数据库服务器启动流程 四. PG逻辑结构4.1 PostgreSQL cluster4.2 database和cluster的关系4…

DevExpress WPF Scheduler组件,快速构建性能优异的调度管理器!(上)

无论您在WPF项目中是需要Outlook样式的调度程序,还是需要时间表或议程视图来向最终用户展示信息,DevExpress WPF Scheduler都提供了数十个选项,如集成的日程对话框等,因此用户可以快速构建下一个伟大的调度管理器。 DevExpress W…