Jetpack Compose 对话框

`Dialog`\] 组件会在主应用内容上方的一层显示弹出消息或请求用户输入。它可以打造干扰性界面体验,以吸引用户的注意力。 对话框的用例如下: * 确认用户操作,例如删除文件时。 * 请求用户输入,例如在待办事项列表应用中。 * 显示用于用户选择的选项列表,例如在个人资料设置中选择国家/地区。 ## 提醒对话框 \[`AlertDialog`\] 可组合项提供了一个便捷的 API,用于创建 Material Design 主题对话框。`AlertDialog` 具有用于处理对话框特定元素的特定参数。其中包括: * `title`:沿对话框顶部显示的文本。 * `text`:显示在对话框中心的文本。 * `icon`:显示在对话框顶部的图形。 * `onDismissRequest`:当用户关闭对话框(例如点按对话框外面)时调用的函数。 * `dismissButton`:用作关闭按钮的可组合项。 * `confirmButton`:充当"确认"按钮的可组合项。 以下示例在提醒对话框中实现了两个按钮,一个用于关闭对话框,另一个用于确认其请求。 ![image.png](https://file.jishuzhan.net/article/1777523904428904449/73bae1276447d137bdb8f23e6a4a3c38.webp) ```ts /** * 调用的地方 */ @Composable private fun example1() { val showDialog = remember { mutableStateOf(false) } Column { customTitle(title = "提醒对话框 效果") Button(modifier = Modifier.padding(start = 15.dp), onClick = { showDialog.value = true }) { Text("显示对话框") } if (showDialog.value) { AlertDialogExample(onDismissRequest= { showDialog.value = false }, onConfirmation = { showDialog.value = false }, dialogTitle = "对话框标题", dialogText = "对话框内容", icon = Icons.Default.Info) } CodeView(assetUrl = "component/dialog/code1.txt", modifier = Modifier.padding(top = 10.dp)) } } /** * 实现的地方 */ @Composable fun AlertDialogExample( onDismissRequest: () -> Unit, onConfirmation: () -> Unit, dialogTitle: String, dialogText: String, icon: ImageVector, ) { AlertDialog( icon = { Icon(icon, contentDescription = "Example Icon") }, title = { Text(text = dialogTitle) }, text = { Text(text = dialogText) }, onDismissRequest = { onDismissRequest() }, confirmButton = { TextButton( onClick = { onConfirmation() } ) { Text("Confirm") } }, dismissButton = { TextButton( onClick = { onDismissRequest() } ) { Text("Dismiss") } } ) } ``` ## 对话框可组合项 \[`Dialog`\] 是一个基本的可组合项,不提供任何样式设置或预定义的内容槽。它是一个相对简单的容器,您应该使用 `Card` 等容器填充该容器。以下是对话框的一些关键参数: * **`onDismissRequest`**:用户关闭对话框时调用的 lambda。 * **`properties`** :\[`DialogProperties`\] 的实例,提供一些额外的自定义范围。 ### 基本示例 以下示例是 `Dialog` 可组合项的基本实现。请注意,它使用 `Card` 作为辅助容器。如果没有 `Card`,`Text` 组件将单独显示在主应用内容的上方。 ![image.png](https://file.jishuzhan.net/article/1777523904428904449/1cd980dc7ac74d07d9ddf2184b6be162.webp) ```ts /** * 调用的地方 */ @Composable private fun example2() { val showDialog = remember { mutableStateOf(false) } Column { customTitle(title = "可组合对话框 效果") Button(modifier = Modifier.padding(start = 15.dp), onClick = { showDialog.value = true }) { Text("显示对话框") } if (showDialog.value) { MinimalDialog(onDismissRequest = { showDialog.value = false }) CodeView( assetUrl = "component/dialog/code1.txt", modifier = Modifier.padding(top = 10.dp) ) } } } @Composable fun MinimalDialog(onDismissRequest: () -> Unit) { Dialog(onDismissRequest = { onDismissRequest() }) { Card( modifier = Modifier .fillMaxWidth() .height(200.dp) .padding(16.dp), shape = RoundedCornerShape(16.dp), ) { Text( text = "This is a minimal dialog", modifier = Modifier .fillMaxSize() .wrapContentSize(Alignment.Center), textAlign = TextAlign.Center, ) } } } ``` ### 高级示例 以下是 `Dialog` 可组合项的更高级实现。在这种情况下,该组件会手动实现与上述 `AlertDialog` 示例类似的接口。 ![image.png](https://file.jishuzhan.net/article/1777523904428904449/19c4046ee97ef9d0bcdb099caa125e2f.webp) [上一篇 Jetpack Compose 抽屉式导航栏](https://juejin.cn/post/7354670092652675124 "https://juejin.cn/post/7354670092652675124")

相关推荐
selt7911 小时前
Redisson之RedissonLock源码完全解析
android·java·javascript
Yao_YongChao2 小时前
Android MVI处理副作用(Side Effect)
android·mvi·mvi副作用
非凡ghost3 小时前
JRiver Media Center(媒体管理软件)
android·学习·智能手机·媒体·软件需求
席卷全城3 小时前
Android 推箱子实现(引流文章)
android
齊家治國平天下3 小时前
Android 14 系统中 Tombstone 深度分析与解决指南
android·crash·系统服务·tombstone·android 14
maycho1235 小时前
MATLAB环境下基于双向长短时记忆网络的时间序列预测探索
android
思成不止于此6 小时前
【MySQL 零基础入门】MySQL 函数精讲(二):日期函数与流程控制函数篇
android·数据库·笔记·sql·学习·mysql
brave_zhao6 小时前
达梦数据库(DM8)支持全文索引功能,但并不直接兼容 MySQL 的 FULLTEXT 索引语法
android·adb
sheji34166 小时前
【开题答辩全过程】以 基于Android的网上订餐系统为例,包含答辩的问题和答案
android
easyboot7 小时前
C#使用SqlSugar操作mysql数据库
android·sqlsugar