对话框是一种小窗口,用于提示用户做出决定或输入更多信息。 对话框不会占据整个屏幕,通常适用于需要用户进行操作才能继续执行的模态框事件。
Dialog
类是对话框的基类,但请勿直接实例化 Dialog
。而是应使用下列子类之一:
AlertDialog- 此对话框可显示标题、按钮(最多三个)、选项 列表或自定义布局。
DatePickerDialog或TimePickerDialog- 此对话框带有允许用户选择日期或 时间。
这些类可定义对话框的样式和结构。您还需要使用 DialogFragment 作为对话框的容器。DialogFragment 类提供
创建对话框和管理其外观所需的所有控件,
而非调用 Dialog 对象上的方法。
使用 DialogFragment 来管理对话框可确保对话框能正确处理各种生命周期事件,如用户点按“返回”按钮或旋转屏幕时。此外,DialogFragment 类还允许您以可嵌入组件的形式在较大界面中重复使用对话框界面,类似于传统的Fragment(例如当您想让对话框界面在大屏幕和小屏幕上具有不同外观时)。
本文档的以下部分介绍了如何将 DialogFragment 与 AlertDialog 对象结合使用。如果您想创建日期或时间选择器,请阅读
向应用添加选择器。
创建对话框 fragment
通过扩展 DialogFragment 并在
onCreateDialog()
回调方法中创建
AlertDialog,您可以完成各种对话框设计,包括自定义
布局以及
Material Design
Dialogs中描述的布局。
例如,以下是一个在 DialogFragment 中管理的基本 AlertDialog:
Kotlin
class StartGameDialogFragment : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return activity?.let { // Use the Builder class for convenient dialog construction. val builder = AlertDialog.Builder(it) builder.setMessage("Start game") .setPositiveButton("Start") { dialog, id -> // START THE GAME! } .setNegativeButton("Cancel") { dialog, id -> // User cancelled the dialog. } // Create the AlertDialog object and return it. builder.create() } ?: throw IllegalStateException("Activity cannot be null") } } class OldXmlActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_old_xml) StartGameDialogFragment().show(supportFragmentManager, "GAME_DIALOG") } }
Java
public class StartGameDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction. AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(R.string.dialog_start_game) .setPositiveButton(R.string.start, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // START THE GAME! } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancels the dialog. } }); // Create the AlertDialog object and return it. return builder.create(); } } // ... StartGameDialogFragment().show(supportFragmentManager, "GAME_DIALOG");
当您创建此类的实例并对该对象调用 show() 时,对话框将如下图所示。
下一部分将详细介绍如何使用 AlertDialog.Builder API 来创建对话框。
根据对话框的复杂度,您可以在 DialogFragment 中实现各种其他回调方法,包括所有基本的 fragment lifecycle methods。
构建提醒对话框
您可以使用 AlertDialog 类来构建各种对话框设计。通常情况下,该类是您完成构建所需的唯一对话框类。如图所示,提醒对话框有三个区域:
- 标题:此为可选项,仅当内容区域被 详细消息、列表或自定义布局占据时才应使用标题。如果需要陈述的是一条简单消息或问题,则不需要标题。
- 内容区域:内容区域可显示消息、列表或其他自定义 布局。
- 操作按钮:对话框中最多可以有三个操作按钮。
AlertDialog.Builder 类提供了 API,可让您创建含有这几种内容(包括自定义
布局)的 AlertDialog。
如需构建 AlertDialog,请执行以下操作:
Kotlin
val builder: AlertDialog.Builder = AlertDialog.Builder(context) builder .setMessage("I am the message") .setTitle("I am the title") val dialog: AlertDialog = builder.create() dialog.show()
Java
// 1. Instantiate an AlertDialog.Builder with its constructor. AlertDialog.Builder