在 Jetpack Compose 中使用 BottomDrawer

news2024/11/25 12:43:35

简介

Jetpack Compose 是一个现代化的,声明式的 UI 工具包,它让我们可以更方便地构建原生 Android UI。在本篇文章中,我们将会讨论如何在 Jetpack Compose 中使用 BottomDrawer

什么是 BottomDrawer?

BottomDrawer 是一种 UI 元素,通常被用来存放应用的导航控件或者提供一些与当前内容相关的额外操作。如同字面意思,它会从屏幕底部滑出,覆盖屏幕的一部分。

如何使用 BottomDrawer

使用 BottomDrawer 的方法相对简单。我们需要使用 ModalDrawerLayoutBottomDrawer 函数。下面是一个简单的例子:

@OptIn(ExperimentalMaterialApi::class)
@Preview
@Composable
fun MyScreen2(){
    val drawerState =rememberBottomDrawerState(BottomDrawerValue.Closed)
    val coroutineScope =rememberCoroutineScope()
    
    BottomDrawer(
        drawerState=drawerState, 
        gesturesEnabled = true,
        modifier = Modifier.fillMaxWidth(),
        drawerContent = {
        ListContent()
    }, content = {
        MainContent { coroutineScope.launch { drawerState.open() }}
        }) 
}

@Composable
fun MainContent(onClick: () -> Unit) {
    Button(onClick = onClick){
        Text(text = "Open Drawer")
    }
}

@Composable
fun ListContent() {
    LazyColumn { 
        items(100){
            Text(text = "Item  22222222222222222222222222222222222222222222222222222222222222222222222 $it")
        }
    }
}

 

在上述代码中,我们首先创建了一个 drawerState 来保存抽屉的状态(打开或关闭)。然后,在 BottomDrawer 中,我们提供了 drawerContentcontent 两个参数。drawerContent 是在抽屉打开时显示的内容,而 content 是主屏幕内容。

我们还添加了一个按钮在 MainContent,当点击按钮时,抽屉会打开。需要注意的是,打开和关闭抽屉需要在协程中进行,因此我们创建了一个 coroutineScope

ListContent 是我们在抽屉中显示的内容,这可以是任何你需要的 Composable。

结论

BottomDrawer 提供了在 Jetpack Compose 中创建一个从底部滑出的抽屉的方法。通过使用 BottomDrawer,我们可以在应用中添加额外的导航或者操作,以提供更好的用户体验。

这只是一个简单的例子,实际上,你可以根据你的应用需求,为 BottomDrawer 添加更多的操作和内容。例如,你可以添加一个关闭按钮,或者在抽屉中显示更复杂的 UI。探索的可能性是无穷无尽的,期待你的发现和创新!

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

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

相关文章

【JAVA】准备工作------Java开发环境搭建,IDEA的基础设置与操作

🍉内容专栏:【JAVA】 🍉本文脉络:JAVA的准备工作,IDEA的安装以及基础设置和快捷操作 🍉本文作者:Melon西西 🍉发布时间 :2023.7.11 目录 1. 概述JDK、JRE 2. 第一个程序——创建…

Win10电脑插耳机没声音了如何恢复正常?

Win10电脑插耳机没声音了如何恢复正常?当Win10电脑插入耳机后却没有声音时,这可能会让用户感到困惑和沮丧,缺乏耳机声音可能会影响到用户的音频体验和日常使用,那么要怎么如何操作,才能让耳机恢复正常,以下…

webpack的打包流程

webpack的打包流程 yarn build 开始都走了哪些流程 yarn build 开始都走了哪些流程

软考A计划-系统集成项目管理工程师-项目进度管理-中

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【微信小程序-uniapp】CustomPicker 自定义单项选择器组件

1. 效果图 2. 组件完整代码 <template><view class="custom-picker"><view :class=<

2023数学建模国赛常用算法-Topsis优劣解距离法

更多国赛数学建模资料思路&#xff0c;关注文末&#xff01; 1 优劣解距离法&#xff08;TOPSIS&#xff09;简介 1.1 概念 TOPSIS 法是一种常用的组内综合评价方法&#xff0c;能充分利用原始数据的信息&#xff0c;其结果能精确地反映各评价方案之间的差距。基本过程为基于…

avue 自定义按钮修改后触发表单自带的校验方法

代码&#xff1a; <avue-form :option"option" v-model"publishForm" ref"publishForm"><template slot-scope"{size}" slot"menuForm"><el-button :size"size" click"$refs.publishForm.re…

【RuoYi-Cloud-Plus】学习笔记 09 - Sentinel(四)熔断降级知识整理

文章目录 前言参考目录版本说明学习笔记1、包结构2、DegradeSlot3、DegradeRule4、DegradeRuleManager5、CircuitBreaker5.1 CircuitBreaker.State6、AbstractCircuitBreaker6.1、AbstractCircuitBreaker#fromCloseToOpen6.2、AbstractCircuitBreaker#fromHalfOpenToOpen6.3、A…

0127 进程与线程1

目录 2.进程与线程 2.1进程与线程 2.1部分习题 2.2处理机调度 2.2部分习题 2.进程与线程 2.1进程与线程 2.1部分习题 1.一个进程的映像是&#xff08;&#xff09; A.由协处理器执行的一个程序 B.一个独立的程序数据集 C.PCB结构与程序和数据的组合 D.…

运动控制--双S型 + PID

运动控制--双S型 PID 1 介绍1.1 概述1.2 梯形速度曲线 VS 双S型速度曲线 2 运动控制器2.1 运动控制器的构成2.2 轨迹生成器2.3 插补器2.4 控制回路 3 PID4 双 S 型4.1 介绍4.2 双S模型&#xff08;7段S型&#xff09;规划参数算法公式轨迹分类 5 多种速度规划对比 【引用 Marc…

计算机网络基础第一章

一、计算机网络的概念及功能 1.1 计算机网络的概念 三网&#xff1a;有线电视网络、电信网络、计算机网络。 三网融合&#xff1a;通过计算机网络可以将有线电视、电信网络通过0/1编码等方式展现进行融合&#xff0c;从而实现计算机网络实现视频、电话等其他网络功能。 四网&a…

git推送出现问题error: remote origin already exists.(解决)

阿丹&#xff1a; 推送git的时候出现问题&#xff0c; 报错remote orign already exists这个错误 错误原因 可能是因为clone下来一个别人的仓库&#xff0c;在此基础上完成你的代码&#xff0c;推送到自己的仓库可能遇到如下问题&#xff1a; error: remote origin already e…

Ubuntu 放弃了战斗向微软投降

导读这几天看到 Ubuntu 放弃 Unity 和 Mir 开发&#xff0c;转向 Gnome 作为默认桌面环境的新闻&#xff0c;作为一个Linux十几年的老兵和Linux桌面的开发者&#xff0c;内心颇感良多。Ubuntu 做为全世界Linux界的桌面先驱者和创新者&#xff0c;突然宣布放弃自己多年开发的Uni…

SSM+Shiro安全框架整合(完成安全认证--登录+权限授权)+ssm整合shiro前后端分离

目录 1.搭建SSM框架 1.1.引入相关的依赖 1.2. spring配置文件 1.3. web.xml配置文件 1.4.配置Tomcat并启动 2.ssm整合shiro---认证功能 (1).引入依赖 (2).修改spring配置文件 (3).修改web.xml文件 (4).新建login.jsp(登录页面) (5).新建success.jsp(登录成功后跳转到此…

POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 列式数据是如何存储与处理的

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

VMware ESXi 7.0 U3n macOS Unlocker OEM BIOS (标准版和厂商定制版)

VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS (标准版和厂商定制版) ESXi 7.0 标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-oem/&#xff0c;查看…

第一代Spring Cloud核心组件

第一代Spring Cloud核心组件&#xff08;Spring Cloud Netflix&#xff09; Eureka服务注册中心(服务注册中心:Eureka,Nacos,Zookeeper,Consul) Ribbon负载均衡 Hystrix熔断器 Feign远程调用组件(Feign RestTemplate Ribbon Hystrix) GateWay网关组件 Config分布式配置中心 …

刘铁猛C#教程笔记——详解类型,变量,和对象第1节

强/弱类型语言 强类型语言&#xff1a;所谓强类型语言就是变量的值十分依赖变量的类型&#xff0c;也就是说假如一个变量其类型是整型&#xff0c;那么你在为该整型变量进行赋值的时候就不可以为其赋值一个字符串类型的常量&#xff0c;C#语言就是典型的强类型语言弱类型语言&…

C# 颠倒二进制位

190 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如 Java&#xff09;中&#xff0c;没有无符号整数类型。在这种情况下&#xff0c;输入和输出都将被指定为有符号整数类型&#xff0c;并且不应影响您的…

微软MFC技术中的消息循环

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来聊聊微软MFC技术中的消息循环。 在很多windows程序中&#xff0c;都有如下代码&#xff1a; //Win32应用程序入口函数WinMain() int WINAPI WinMain(HINSTANCE hInstance, //指向当前实例的句柄…