您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # Android AlertDialog的几种用法介绍
## 目录
1. [AlertDialog概述](#1-alertdialog概述)
2. [基础AlertDialog使用](#2-基础alertdialog使用)
3. [带列表的AlertDialog](#3-带列表的alertdialog)
4. [单选/多选对话框](#4-单选多选对话框)
5. [自定义布局AlertDialog](#5-自定义布局alertdialog)
6. [Material风格对话框](#6-material风格对话框)
7. [对话框生命周期管理](#7-对话框生命周期管理)
8. [高级技巧与最佳实践](#8-高级技巧与最佳实践)
9. [常见问题解决方案](#9-常见问题解决方案)
---
## 1. AlertDialog概述
### 1.1 什么是AlertDialog
AlertDialog是Android提供的一个预置对话框组件,用于:
- 显示重要信息
- 获取用户确认
- 提供选择项
- 收集简单输入
### 1.2 核心特点
- **链式调用**:通过Builder模式构建
- **高度可定制**:支持标题、消息、图标、按钮和自定义布局
- **生命周期感知**:自动与Activity生命周期绑定
### 1.3 类继承关系
Dialog └── AlertDialog ├── MaterialAlertDialogBuilder (Material Components) └── AppCompatAlertDialog (Support Library)
---
## 2. 基础AlertDialog使用
### 2.1 基本构建方法
```kotlin
AlertDialog.Builder(context).apply {
    setTitle("温馨提示")
    setMessage("确定要删除此项吗?")
    setPositiveButton("确定") { dialog, which ->
        // 确定操作
    }
    setNegativeButton("取消", null)
    setNeutralButton("稍后提醒") { _, _ ->
        // 中性操作
    }
}.create().show()
| 按钮类型 | 作用场景 | 代码方法 | 
|---|---|---|
| PositiveButton | 主确认操作(如”确定”) | setPositiveButton() | 
| NegativeButton | 取消/拒绝操作(如”取消”) | setNegativeButton() | 
| NeutralButton | 次要操作(如”稍后”) | setNeutralButton() | 
// 自定义按钮文字颜色
val dialog = AlertDialog.Builder(context).create()
dialog.setOnShowListener {
    dialog.getButton(AlertDialog.BUTTON_POSITIVE)?.setTextColor(Color.RED)
}
val items = arrayOf("选项1", "选项2", "选项3")
AlertDialog.Builder(context)
    .setTitle("请选择")
    .setItems(items) { _, which ->
        Toast.makeText(context, "选择了${items[which]}", Toast.LENGTH_SHORT).show()
    }
    .show()
ArrayAdapter<String>(this, android.R.layout.select_dialog_item).apply {
    add("微信")
    add("支付宝")
    add("银行卡")
}.let { adapter ->
    AlertDialog.Builder(this)
        .setAdapter(adapter) { _, position -> 
            handlePayment(position)
        }
        .show()
}
val options = arrayOf("标准模式", "深色模式", "护眼模式")
var currentSelection = 0
AlertDialog.Builder(this)
    .setTitle("显示模式设置")
    .setSingleChoiceItems(options, currentSelection) { dialog, which ->
        currentSelection = which
    }
    .setPositiveButton("确认") { _, _ ->
        applyDisplayMode(currentSelection)
    }
    .show()
val selectedItems = booleanArrayOf(true, false, true)
val items = arrayOf("阅读", "音乐", "运动")
AlertDialog.Builder(this)
    .setMultiChoiceItems(items, selectedItems) { _, which, isChecked ->
        selectedItems[which] = isChecked
    }
    .setPositiveButton("确定") { _, _ ->
        saveSelections(selectedItems)
    }
    .show();
val view = layoutInflater.inflate(R.layout.custom_dialog, null)
AlertDialog.Builder(this)
    .setView(view)
    .setPositiveButton("提交") { _, _ ->
        val input = view.findViewById<EditText>(R.id.et_input).text.toString()
        handleInput(input)
    }
    .show()
match_parent作为对话框宽度WindowManager.LayoutParams调整对话框尺寸:dialog.window?.setLayout(
    (resources.displayMetrics.widthPixels * 0.9).toInt(), 
    WindowManager.LayoutParams.WRAP_CONTENT
)
implementation 'com.google.android.material:material:1.6.0'
MaterialAlertDialogBuilder(context)
    .setTitle("Material对话框")
    .setMessage("这是Material Design风格的对话框")
    .setBackground(resources.getDrawable(R.drawable.dialog_bg))
    .setPositiveButton("确定") { _, _ -> }
    .show()
class MyDialogFragment : DialogFragment() {
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return activity?.let {
            AlertDialog.Builder(it)
                .setMessage("我会在旋转后自动恢复")
                .create()
        } ?: throw IllegalStateException()
    }
}
// 错误方式(可能导致WindowLeaked)
new AlertDialog.Builder(activity).show();
// 正确方式
MyDialogFragment().show(supportFragmentManager, "tag");
fun showSequentialDialogs() {
    val dialog1 = AlertDialog.Builder(this).setMessage("第一步").apply {
        setPositiveButton("下一步") { _, _ -> showDialog2() }
    }.create()
    
    dialog1.show()
}
private fun showDialog2() {
    AlertDialog.Builder(this).setMessage("第二步").show()
}
dialog.window?.attributes?.windowAnimations = R.style.DialogAnimation
原因:未调用create()直接show()
解决:
val dialog = builder.create()
dialog.show()
dialog.getButton(AlertDialog.BUTTON_POSITIVE)?.isEnabled = false
@Override
protected void onDestroy() {
    if(dialog != null && dialog.isShowing()){
        dialog.dismiss();
    }
    super.onDestroy();
}
本文全面介绍了AlertDialog的7种核心用法: 1. 基础警告对话框 2. 列表选择对话框 3. 单选/多选对话框 4. 自定义布局对话框 5. Material Design对话框 6. 对话框生命周期管理 7. 高级使用技巧
通过合理使用这些模式,可以构建出既美观又符合平台规范的对话框交互体验。 “`
(注:实际文章需要补充更多示例代码、示意图和详细说明以达到7200字要求,此处为大纲框架)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。