如何改变android compose中对话框的宽度

Kof*_*fi 12 android dialog android-alertdialog kotlin android-jetpack-compose

使用 Compose 更改对话框的宽度似乎是不可能的。我最接近改变对话框宽度的是通过DialogProperties.usePlatformDefaultWidth. 将其设置为 false 会导致对话框填满屏幕,但有没有办法使用自定义宽度?

Gab*_*tti 23

使用可以使用带、和参数AlertDialog的构造函数定义自定义,并应用大小(例如使用)并使用 覆盖默认行为:texttitlebuttonsModifier.sizeusePlatformDefaultWidth = false

AlertDialog(
    onDismissRequest = { /*TODO*/ },
    title = {
        Text(text = "Title")
    },
    text = {
        Text(
            "This area typically contains the supportive text " +
                    "which presents the details regarding the Dialog's purpose."
        )
    },
    buttons = {},
    properties = DialogProperties(
        usePlatformDefaultWidth = false
    ),
    modifier = Modifier.size(200.dp,250.dp)
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 5

如果您想在所有项目中使用恒定宽度,您可以创建一个具有自定义宽度的对话框,如下所示

@Composable
fun MyCustomDialog(
    onDismissRequest: () -> Unit,
    properties: DialogProperties = DialogProperties(),
    content: @Composable () -> Unit
) {
    Dialog(
        onDismissRequest = onDismissRequest,
        // We are copying the passed properties 
        // then setting usePlatformDefaultWidth to false
        properties = properties.let {
            DialogProperties(
                dismissOnBackPress = it.dismissOnBackPress,
                dismissOnClickOutside = it.dismissOnClickOutside,
                securePolicy = it.securePolicy,
                usePlatformDefaultWidth = false
            )
        },
        content = {
            Surface(
                color = Color.Transparent,
                modifier = Modifier.width(250.dp), // Customize your width here
                content = content
            )
        }
    )
}
Run Code Online (Sandbox Code Playgroud)