有没有办法用Jetpack Compose自定义AlertDialog的WindowManager.LayoutPara



我尝试在其他应用程序上显示警报对话框。权限已授予。

<uses-permission android:name="ACTION_MANAGE_OVERLAY_PERMISSION"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

组合方式根本不起作用,代码如下:

AlertDialog(onDismissRequest = { dialogEnabled.value = false },
title = { Text(text = "Test")},
text = {
Text(text = message)
},
confirmButton = {
TextButton(onClick = { dialogEnabled.value = false }) {
Text(text = "Confirm")
}
},
dismissButton = {
TextButton(onClick = { dialogEnabled.value = false }) {
Text(text = "Cancel")
}
}
)

我把AlertDialog窗口的类型设置为WindowManager.LayoutParams.type_APPLICATION_OVERLAY。但是,我在AndroidDialog.android.kt下查看AlertDialog的代码,没有办法获得对话框实例的引用,甚至连DialogProperty都没有。

最终,我使用了传统的方式来实现

private fun showDialog(message: String){
val builder: AlertDialog.Builder = AlertDialog.Builder(this) //set icon
.setIcon(android.R.drawable.ic_dialog_alert) //set title
.setTitle("Game Analysis") //set message
.setMessage(message) //set positive button
.setPositiveButton(
"Confrim"
) { dialogInterface, i -> //set what would happen when positive button is clicked
dialogInterface.dismiss()
} //set negative button
.setNegativeButton(
"Cancel"
) { dialogInterface, i -> //set what should happen when negative button is clicked
dialogInterface.dismiss()
}
val alertDialog: AlertDialog = builder.create()
alertDialog.window!!.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
alertDialog.show()
}

Jetpack Compose Android的自定义警报对话框。Jetpack Compose是一款适用于Android的新声明性UI工具,它允许使用Kotlin创建UI,以取代繁琐的XML布局。

在此处输入图像描述

//Create custom dialog
@Composable
fun DialogExample(
onDismiss: () -> Unit,
onNegativeClick: () -> Unit,
onPositiveClick: () -> Unit
) {
Dialog(onDismissRequest = onDismiss) {
val color = Color(0xff4DB6AC)
Card(elevation = 8.dp, shape = RoundedCornerShape(12.dp)) {
Column {
Box(
modifier = Modifier
.fillMaxWidth()
.height(160.dp)
.background(color)
) {
Icon(
tint = Color.White,
painter = painterResource(id = R.drawable.ic_baseline_location_on_24),
contentDescription = null,
modifier = Modifier
.graphicsLayer(scaleX = 1.2f, scaleY = 1.2f)
.align(
Alignment.Center
)
)
}
Column(modifier = Modifier.padding(16.dp)) {
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
Text("To send a nearby place or your location, allow access to your location.")
}
Row(
horizontalArrangement = Arrangement.End,
modifier = Modifier.fillMaxWidth()
) {
Text(
text = "Not Now", color = color,
modifier = Modifier
.clickable(
interactionSource = MutableInteractionSource(),
indication = rememberRipple(color = Color.DarkGray),
onClick = onNegativeClick
)
.padding(8.dp)
)
Spacer(modifier = Modifier.width(4.dp))
Text(
text = "Allow", color = color,
modifier = Modifier
.clickable(
interactionSource = MutableInteractionSource(),
indication = rememberRipple(color = Color.DarkGray),
onClick = onPositiveClick
)
.padding(8.dp)
)
}
}
}
}
}

您可以使用此代码来显示警报对话框

最新更新