Skip to content

对话框 (Dialogs)

源:Dialogs

对话框用于通知用户特定任务,并包含关键信息、决策或涉及多个子任务。

对话框变体

变体对比

  1. Basic dialog (基础对话框): 中断用户,要求进行简单的确认或选择。
  2. Full-screen dialog (全屏对话框): 填充整个屏幕,用于包含一系列复杂任务(如创建日程)。

核心属性 (MaterialAlertDialog)

元素属性默认值
容器颜色app:backgroundTint?attr/colorSurfaceContainerHigh
圆角大小app:shapeAppearance?attr/shapeAppearanceCornerExtraLarge
标题字体android:textAppearance?attr/textAppearanceHeadlineSmall

代码实现

1. 基础用法 (MaterialAlertDialogBuilder)

Material 3 提供了 MaterialAlertDialogBuilder,推荐优先使用它而不是原生的 AlertDialog.Builder

kotlin
MaterialAlertDialogBuilder(context)
    .setTitle("确认删除?")
    .setMessage("该操作无法撤销,请谨慎操作。")
    .setNeutralButton("稍后再说") { dialog, which ->
        // 处理中性按钮
    }
    .setNegativeButton("取消") { dialog, which ->
        // 处理取消
    }
    .setPositiveButton("删除") { dialog, which ->
        // 处理确认
    }
    .show()

2. 带列表的对话框

kotlin
val items = arrayOf("选项 1", "选项 2", "选项 3")
MaterialAlertDialogBuilder(context)
    .setTitle("请选择一个项目")
    .setItems(items) { dialog, which ->
        // which 是点击的索引
    }
    .show()
kotlin
val items = arrayOf("WiFi", "蓝牙", "NFC")
val checkedItems = booleanArrayOf(true, false, false)
MaterialAlertDialogBuilder(context)
    .setTitle("设置")
    .setMultiChoiceItems(items, checkedItems) { dialog, which, isChecked ->
        // 更新状态
    }
    .show()

主题化

你可以通过设置 materialAlertDialogTheme 来全局改变对话框的视觉风格。

xml
<style name="Theme.App" parent="Theme.Material3.*">
    <!-- 替换为自定义对话框主题 -->
    <item name="materialAlertDialogTheme">@style/ThemeOverlay.App.MaterialAlertDialog</item>
</style>

<style name="ThemeOverlay.App.MaterialAlertDialog" parent="ThemeOverlay.Material3.MaterialAlertDialog">
    <item name="colorSurface">@color/my_custom_background</item>
    <item name="materialAlertDialogTitleTextStyle">@style/MyTitleStyle</item>
</style>