Mat*_*ert 6 android android-jetpack-compose
当我开始使用 Compose 而不是 xml 创建所有新的 UI 组件时,我不确定如何处理在 Compose 中创建的对话框。
在 Compose之外使用对话框只需要对话框的上下文:
val builder = AlertDialog.Builder(context as Activity, R.style.PermissionInfoDialog)
[...]
builder.show()
Run Code Online (Sandbox Code Playgroud)
只要您有上下文,这就可以让您从“任何地方”触发对话框(是的,我意识到这可能会被滥用),但据我所知,对于撰写,我需要一个“可组合视图”来添加自定义撰写对话框?当您有一个可以显示特定对话框的特定片段时,这是可以管理的,但如果您想要可以重复使用的更通用的片段,例如:
那么这会变得更加混乱。
在我的特定场景中,我有许多不同的片段需要请求权限的能力。请求权限的能力(这要求我们向用户解释为什么需要它)以自定义对话框开头。这个抽象片段包含这个逻辑,但是抽象片段不知道添加我的 Compose 对话框所需的(?)单个 ComposeView 或 xml(因为这个应用程序是新旧内容的混合体)。当然,我可以有一个函数,让抽象片段请求“在某个地方显示对话框”,并让每个片段提供一个 ComposeView,但这对我来说感觉不自然且被迫。
关于如何解决这个问题,我是否缺少一些东西和/或一些“常见做法”?我想我正在寻找与旧解决方案类似(逻辑上)的东西,即简单地引用上下文(或类似的)来显示对话框。
请使用AlertDialog在撰写中添加对话框。
val openDialog = remember { mutableStateOf(true) }
if (openDialog.value) {
AlertDialog(
onDismissRequest = {
openDialog.value = false
},
title = {
Text(text = "Title")
},
text = {
Text(
"This area typically contains the supportive text " +
"which presents the details regarding the Dialog's purpose."
)
},
buttons = {
Row(
modifier = Modifier.padding(all = 8.dp),
horizontalArrangement = Arrangement.Center
) {
Button(
modifier = Modifier.fillMaxWidth(),
onClick = { openDialog.value = false }
) {
Text("Dismiss")
}
}
}
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |