Dialog类是所有对话框的基类,不应该实例化Dialog而是采用如下子类进行实例化:
- AlertDialog: 可以显示标题、最多三个按钮、可选项列表或者自定义布局
- DatePickerDialog和**TimePickerDialog:**这是预定义的对话框可以选择日期或者时间
- ProgressDialog:带有进度条的对话框,但是不推荐使用,它会阻止用户与应用程序进行交互。
谷歌官方推荐使用DialogFragment作为对话框的容器,DialogFragment类提供了创建对话框和管理器外观所需的所有控件
创建一个简单的DialogFragment
可以继承DialogFragment并重写onCreateDialog(),在回调方法中创建AlertDialog来完成各种对话框设计-包括自定义布局。
例如:
public class FireMissilesDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("Fire missiles?")
.setPositiveButton("FIRE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// todo...
}
})
.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// todo...
}
});
// 创建并返回AlertDialog实例
return builder.create();
}
}
使用FireMissilesDialogFragment
FireMissilesDialogFragment fireMissilesDialogFragment = new FireMissilesDialogFragment();
fireMissilesDialogFragment.show(getSupportFragmentManager(),"dialog");
Tips:第二个参数“dialog”是一个唯一的标记名称,系统在必要时可以用它来保存和回复片段状态。还可以调用findFragmentByTag来获取片段的句柄。
构建AlertDialog
使用AlertDialog类可以构建设计各种dialog
在构建AlertDialog时谷歌官方推荐使用AlertDialog.Builder,它可以创建包括自定义对话框在内的各种内容的Dialogs
AlerDialog.Builder builder = new AlertDialog.Builder(getActivity());
// 通过链式调用各种setter方法完成Dialog的设置
builder.setMessage("Message")
.setTitle("Tittle");
AlterDialog dialog = builder.create();