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")

相关推荐
tangweiguo0305198726 分钟前
Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案
android
老狼孩1112235 分钟前
2025新版懒人精灵零基础及各板块核心系统视频教程-全分辨率免ROOT自动化开发
android·机器人·自动化·lua·脚本开发·懒人精灵·免root开发
打死不学Java代码1 小时前
PaginationInnerInterceptor使用(Mybatis-plus分页)
android·java·mybatis
IT乐手3 小时前
android 解决系统级应用 WebView 加载崩溃的问题
android
Kapaseker3 小时前
Kotlin泛型精解:类型世界的奇幻之旅
android·kotlin
顾林海3 小时前
深入探究 Android Native 代码的崩溃捕获机制
android·面试·性能优化
爱分享的程序员4 小时前
前端跨端框架的开发以及IOS和安卓的开发流程和打包上架的详细流程
android·前端·ios
thigh_d4 小时前
uniapp 安卓离线本地打包,Android Studio生成apk包
android·uni-app·android studio
二J6 小时前
管理100个小程序-很难吗
android·小程序
s11show_1636 小时前
hz修改后台新增keyword功能
android·java·前端