对话框(Dialogs)
一个对话框是一个小窗口,提示用户做出决策或输入额外的信息。一个对话框不填满屏幕,通常用于模态事件,要求用户采取行动才能继续进行。
设计对话框
关于如何设计对话框,请查看对话框设计指南。
Dialog类是对话框的基类,但是应该避免直接实例化Dialog。替代的,使用以下子类:
AlertDialog
这种对话框可以显示一个标题,最多有三个按钮,可以有一个选择项列表,或者有定制化的布局。
DatePickerDialog或者TimePickerDialog
一个预先定义好了UI界面的对话框,允许用户选择一个日期或者时间。
虽然这些类定义了对话框的风格和结构,但是应该使用一个DialogFragment作为对话框的容器。这个DialogFragment类提供了所有创建对话框和管理它的外观所需要的控制,而不是调用Dialog对象上的方法。
用DialogFragment管理对话框可以确保它正确地处理生命周期事件,比如当用户按下返回按钮或旋转屏幕。这个DialogFragment类还允许你重用对话框的界面称为嵌入式组件在一个更大的界面,就像一个传统的Fragment(比如当你希望对话框界面在大型和小型屏幕上表现不一样)。
避免使用ProgressDialog
Android包括另一个对话框类,叫做ProgressDialog显示一个对话框,其中有一个进度条。然而,如果你需要显示加载或不定的进步,你应该遵循设计指南进展&活动和使用ProgressBar在你的布局。
以下部分将描述如何使用DialogFragment结合一个AlertDialog对象。 如果你想创建一个日期或时间选择器,你应该阅读选择器指南(the Pickers guide)。
注意:因为DialogFragment类最初加入Android 3.0(API级别11),本文档描述了如何使用DialogFragment类提供的支持库。 通过添加这个库来你的应用程序,您可以使用DialogFragment和各种其他api在设备运行Android 1.6或更高。如果你的应用程序支持的最低版本是API级别11或更高版本,那么您可以使用框架版本的DialogFragment,但是要知道链接在这个文件是为支持库的API。当使用支持库时,请确保导入android.support.v4.app.DialogFragment,而不是android.app.DialogFragment。
创建Dialog Fragment
你可以完成各种各样的对话框的设计包括自定义布局和描述的对话框设计指南是由扩展DialogFragment和创建一个AlertDialog在onCreateDialog()回调方法。
例如,下面是一个基本的AlertDialog管理的DialogFragment内:
public class FireMissilesDialogFragment 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_fire_missiles) .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // FIRE ZE MISSILES! } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog } }); // Create the AlertDialog object and return it return builder.create(); }}
现在,当您创建这个类的一个实例并调用显示()对象,对话框如图1。
图1:带有一条信息和两个按钮的对话框。
下一节描述了更多关于使用AlertDialog。构建器api来创建对话框。
这取决于你的对话框是多么复杂,你可以实现多种其他回调方法,包括所有的基本DialogFragment片段的生命周期方法。
创建一个警告对话框
这个AlertDialog类允许您构建各种对话框设计,往往是唯一的对话框类你需要。如图2所示,有三个地区的一个警告对话框:
1. 标题
这是可选的,应该只在内容区域被详细的消息,一个列表,或自定义布局。如果你需要一个简单的信息或问题的状态(如在图1的对话框),你不需要一个标题。
2. 内容区域
这可以显示一个消息,一个列表,或其他自定义布局。
3. 行为按钮
不应超过三个操作按钮在对话框。
图2:对话框的布局
AlertDialog.Builder类提供了API,允许你创建一个AlertDialog与这些类型的内容,包括一个自定义的布局。
要创建一个AlertDialog:
// 1. Instantiate an AlertDialog.Builder with its constructorAlertDialog.Builder builder = new AlertDialog.Builder(getActivity());// 2. Chain together various setter methods to set the dialog characteristicsbuilder.setMessage(R.string.dialog_message) .setTitle(R.string.dialog_title);// 3. Get the AlertDialog from create()AlertDialog dialog = builder.create();下列主题演示如何使用AlertDialog.Builder类来定义各种对话框属性。
添加按钮
添加动作按钮像那些在图2中,调用setPositiveButton()和setNegativeButton()方法: