好的,阿杰,我们来系统地讲一讲 Android 开发中的 Dialog 对话框,我会从概念、类型、用法到进阶技巧一步步讲清楚。


1. Dialog 概念

**Dialog(对话框)**是 Android 提供的一种 浮动窗口组件,用于提示信息、获取用户输入或做简单选择。
特点:

  • 浮在当前 Activity 上,不占用全屏
  • 交互性强,通常包含按钮、输入框或列表
  • 可自定义布局和样式

2. Dialog 类型

2.1 AlertDialog(最常用)

  • 用于显示 警告、确认、选择 等信息
  • 可以包含 标题、内容、按钮

示例

new AlertDialog.Builder(this)
    .setTitle("提示")
    .setMessage("确定要退出吗?")
    .setPositiveButton("确定", (dialog, which) -> finish())
    .setNegativeButton("取消", null)
    .show();


2.2 ProgressDialog(已过时)

  • 用于显示 进度条,通常在耗时操作时使用
  • Android 官方建议使用 ProgressBar + DialogFragment 替代

2.3 DatePickerDialog / TimePickerDialog

  • 用于选择 日期 或 时间
  • 示例:
DatePickerDialog dialog = new DatePickerDialog(this,
    (view, year, month, dayOfMonth) -> {
        // 处理选择的日期
    }, 2025, 7, 27);
dialog.show();


2.4 自定义 Dialog

  • 可以使用 Dialog 或 DialogFragment 自定义布局
  • 示例:
Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog_layout);
dialog.show();

  • 可以在布局中放 EditText、Button、ImageView 等控件

3. Dialog 的显示方式

  • show():显示对话框
  • dismiss() / cancel():关闭对话框
  • setCancelable(boolean):是否允许点击空白区域或返回键取消

4. DialogFragment(推荐)

  • 继承 DialogFragment 可以更好地处理 生命周期 和 旋转屏幕重建
  • 示例:
public class MyDialogFragment extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
            .setTitle("提示")
            .setMessage("这是DialogFragment")
            .setPositiveButton("确定", null)
            .create();
    }
}

// 显示
new MyDialogFragment().show(getSupportFragmentManager(), "dialog");


5. 注意事项

  1. 不要在后台线程直接操作 Dialog → 会报异常
  2. 避免内存泄漏 → 使用 DialogFragment 更安全
  3. UI 风格 → 可通过 Theme.Dialog 或自定义样式美化

💡 小技巧:

  • AlertDialog 的按钮可以通过 setOnShowListener 修改样式或字体
  • 自定义 Dialog + RecyclerView 可以实现选择列表或复杂交互