好的,阿杰,我们来系统地讲一讲 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. 注意事项
- 不要在后台线程直接操作 Dialog → 会报异常
- 避免内存泄漏 → 使用 DialogFragment 更安全
- UI 风格 → 可通过
Theme.Dialog
或自定义样式美化
💡 小技巧:
- AlertDialog 的按钮可以通过 setOnShowListener 修改样式或字体
- 自定义 Dialog + RecyclerView 可以实现选择列表或复杂交互
发表回复