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

相关推荐
peakmain93 小时前
Jetpack Compose UI组件封装(一)
android jetpack
张风捷特烈8 小时前
Flutter 伪3D绘制#03 | 轴测投影原理分析
android·flutter·canvas
omegayy11 小时前
Unity 2022.3.x部分Android设备播放视频黑屏问题
android·unity·视频播放·黑屏
mingqian_chu11 小时前
ubuntu中使用安卓模拟器
android·linux·ubuntu
自动花钱机11 小时前
Kotlin问题汇总
android·开发语言·kotlin
行墨14 小时前
Kotlin 主构造函数
android
前行的小黑炭14 小时前
Android从传统的XML转到Compose的变化:mutableStateOf、MutableStateFlow;有的使用by有的使用by remember
android·kotlin
_一条咸鱼_14 小时前
Android Compose 框架尺寸与密度深入剖析(五十五)
android
在狂风暴雨中奔跑14 小时前
使用AI开发Android界面
android·人工智能
行墨14 小时前
Kotlin 定义类与field关键
android