Android Compose 中的位置警报对话框

Ram*_*abu 12 android android-alertdialog android-jetpack-compose

如何将 Jetpack Compose 中的警报对话框放置在屏幕底部。另外,设置透明背景。

小智 14

从弗拉基米尔的回应中得到的想法对我来说最有效的解决方案是从对话框中获取对窗口的引用并设置所需的重力。

Dialog(
    onDismissRequest = [...],
    properties = [...],
) {
    val dialogWindowProvider = LocalView.current.parent as DialogWindowProvider
    dialogWindowProvider.window.setGravity(Gravity.BOTTOM)
    [...]
}
Run Code Online (Sandbox Code Playgroud)

演员阵容应该不是问题,但当然,可以安全地演员阵容以防止出现不愉快的意外。


Ram*_*abu 10

谢谢@alekseyHunter 和@johann。我可以使用自定义布局修改器来实现这一点。

用于定位警报对话框的自定义修饰符

enum class CustomDialogPosition {
    BOTTOM, TOP
}

fun Modifier.customDialogModifier(pos: CustomDialogPosition) = layout { measurable, constraints ->

    val placeable = measurable.measure(constraints);
    layout(constraints.maxWidth, constraints.maxHeight){
        when(pos) {
            CustomDialogPosition.BOTTOM -> {
                placeable.place(0, constraints.maxHeight - placeable.height, 10f)
            }
            CustomDialogPosition.TOP -> {
                placeable.place(0,0,10f)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并在警报对话框实现中作为

AlertDialog( ..., modifiers = Modifiers.customDialogModifier(CustomDialogPosition.BOTTOM)) 
{
    // block
})
Run Code Online (Sandbox Code Playgroud)

  • 这本质上创建了一个全屏对话框,并且它破坏了“dismissOnClickOutside”,因为没有“外部”。 (8认同)