Jetpack Compose弹窗 Material-AlertDialog和Material3-AlertDialog

4,233 阅读2分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

本篇文章就说说 Compose的消息弹窗

Compose的AlertDialog弹窗不像传统的Dialogn那么死板,Compose的十分灵活,

官网的介绍是这样的:
对话框将根据可用空间定位其按钮。默认情况下,它将尝试将它们水平放置在彼此相邻的位置,如果没有足够的可用空间,则返回到水平放置。还有另一个版本的这个组合,有一个插槽的按钮,以提供自定义按钮布局。

Compose的灵活提现在自定义上面
传统的AlertDialog自定义起来有点小麻烦,而Compose写出来就是自定义了,这一点我就爱了。

步入正题AlertDialog有十个参数
1.onDismissRequest Dismiss的回调 单击“取消”按钮时,不会调用此选项。
2.modifier 应用于对话框布局的修改器。
3.confirmButton 确认按钮 要传入一个按钮的Compose控件
4.dismissButton 关闭对话框的按钮 要传入一个按钮的Compose控件
5.title 标题
6.text 显示有关对话框用途的详细信息的文本。默认的文本样式将是排版。Typography.body2
7.shape 定义对话框的形状
8.backgroundColor 背景色
9.contentColor 为此对话框为其子级提供的首选内容颜色。
10.properties用于自定义对话框行为的属性。

使用方法

val showingDialog = remember { mutableStateOf(false) }

用remember来判断Dialog是否显示 mutableStateOf用布尔值定义

简单使用

@Composable
private fun AlertDialog() {
    val showingDialog = remember { mutableStateOf(false) }
    if (showingDialog.value) {
        AlertDialog(
            onDismissRequest = {
                showingDialog.value = false
            },
            
             title = {
                Text(text = "标题")
            },
            text = {
                Text(text = "副标题")
            },
           
            confirmButton = {
                TextButton(
                    onClick = {
                        showingDialog.value = false
                    },
                    modifier = Modifier
                        .padding(16.dp)
                ) {
                    Text("按钮")
                }
            },
        )
    }
    //触发弹窗的按钮
    Button(
        onClick = { showingDialog.value = true },
    ) {
        Text(
            text =  "Default dialog"
        )
    }
}

48225467a16bdb2075fb033e6dbf312.jpg

显示弹窗

showingDialog.value = true

Dismiss的回调

 onDismissRequest = {
                showingDialog.value = false
            }

contentColor的作用

contentColor = Color.Cyan,

fa311fbe197d95d3da201d18eacfe31.jpg

就是可以改变内容的颜色

是不是觉得方方正正不是很好看 那就来material3试试

material3‘

导入依赖

implementation("androidx.compose.material3:material3:1.0.0-alpha03")

写本篇文章的时候最新是1.0.0-alpha03 最新版本自行查阅 compose-material3官网

替换导入的包

import androidx.compose.material3.*

就可以了 效果图 5f4f1fd41ba0c2922285f066d855ec8.jpg

圆润了不少

material3中contentColor方法换成了textContentColortitleContentColor
分别设置文本和标题的字体颜色

新增
containerColor可以理解成背景颜色

containerColor = Color.Cyan

d935745b6c07c596280c9aa67ef7fcc.jpg iconContentColor 小图标的颜色

tonalElevation当containerColor为ColorScheme时。在曲面上,色调提升值越高,亮主题中的对话框颜色越深,而暗主题中的对话框颜色越浅

tonalElevation = 6.dp,

亮色主题

b236747226ec1a113d6240bebe88ebc.jpg 暗色主题

085b1b7d60d8305c15b6bb8c5badccb.jpg

理解为传统的Elevation方法就可以了