转载请注明本文出自woochen123的博客(http://blog.csdn.net/chewu1590/article/details/57412842),请尊重他人的辛勤劳动成果,谢谢!
官方API:
https://developer.android.google.cn/guide/topics/ui/dialogs.html
好处:
1.官方不推荐直接使用Diaglog创建对话框
2.与fragment一样有正常的生命周期,便于管理
创建:
1.实现onCreateView方法(使用定义的xml布局文件展示Dialog)
可适用场景:全屏显示对话框或将其显示为嵌入式片段(参见)
/** 系统调用这个来获取DialogFragment的布局,不管是否显示为对话框或嵌入的片段. */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.purchase_items, container, false);
}
2.实现onCreateDialog方法(利用AlertDialog或者Dialog创建出Dialog)
2.1 AlertDialog样式
/** 只有在对话框中创建布局时,系统才会调用此方法. */
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
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) {
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
// Create the AlertDialog object and return it
return builder.create();
}
2.2 自定义布局样式
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
builder.setView(inflater.inflate(R.layout.dialog_signin, null))
// Add action buttons
.setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// sign in the user ...
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
LoginDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
使用:
DialogFragment newFragment = new FireMissilesDialogFragment();
//第二个参数 "missiles" 是系统用于保存片段状态并在必要时进行恢复的唯一标记名称。
//该标记还允许您通过调用 findFragmentByTag() 获取片段的句柄。
newFragment.show(getSupportFragmentManager(), "missiles");
销毁:
1.当用户触摸使用 AlertDialog.Builder 创建的任何操作按钮时,系统会自动清除对话框
2.通过在 DialogFragment 上调用dismiss() 来手动清除对话框
常用API:
1.取消默认标题:getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
2.外部点击不消失:getDialog().setCanceledOnTouchOutside(false);
更多信息敬请关注微信: