概述:
Dialog是一个让用户做出选择或者填写信息的小窗口, 通常dialog都不会占据整个屏幕, 但是需要用户必须做出选择. 关于如何设计Dialog, 可以参考这里.
Dialog类是dialog的基类, 但是我们应该避免直接使用这个类, 官方推荐我们使用以下两个子类:
AlertDialog: 一个Dialog, 可以设置title, 最多可以设置3个按键, 一个可以选择的列表, 或者一个用户自定义的layout.
DatePickerDialog或者TimePickerDialog:一个自带UI的可以选择时间或者日期的对话框.
这些子类为dialog定义了样式和结构, 但是我们应该使用DialogFragment作为dialog的容器. DialogFragment类提供了所有我们需要的创建和管理dialog行为的接口. 使用DialogFragment可以确保我们的dialog可以正确的处理生命周期事件, 比如用户点击了返回键或者旋转了屏幕等. DialogFragment还可以让我们方便的重用dialog的UI, 就好像一个普通的Fragment那样.
该文档中的DialogFragment都是android.support.v4.app.DialogFragment, 而不是android.app.DialogFragment.
创建一个DialogFragment:
通过DialogFragment我们可以创建多种dialog, 比如这是一个DialogFragment管理的AlertDialog:
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 ZEMISSILES!
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Usercancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
包含一个message和两个button的dialog. 当我们创建这样的一个类的实例并且调用show()方法的时候, 就会显示出这样的一个dialog.
根据我们的dialog的复杂程度, 我们可以实现DialogFragment的其它回调方法.
创建一个AlertDialog:
通过AlertDialog我们可以创建多种dialog, 它如此牛X以至于很可能使我们唯一需要的dialog类. 如下图, 一个alert dialog中有三个区域:
1. Title: 该项是可选的, 应该在区域2被详细信息占据的时候使用.如果我们仅仅需要一个简单的消息或者提一个问题, 则不应该使用title.
2. Content area: 用于显示一条信息, 一个列表或者自定义的layout.
3. Action buttons: 按钮, 一个dialog中不应该超过3个按钮.
AlertDialog.Builder类为我们提供了可以设置上述三项的API, 还包括一个layout, 栗子:
// 1. Instantiate an AlertDialog.Builder with its constructor
AlertDialog.Builder builder = new AlertDialog.Builder