DialogFragment是Android3.0之后引入的一种特殊的Fragment,官方建议使用DialogFragment代替Dialog或者AllertDialog来实现弹框的功能,因为它可以更好的管理Dialog的生命周期以及可以更好复用。
使用DialogFragment至少需要实现onCreateView或者onCreateDialog方法。 onCreateView是使用定义的xml布局文件展示Dialog。onCreateDialog是利用AlertDialog或者Dialog创建出Dialog。不过google不推荐直接使用Dialog,我们就使用AlertDialog来创建。
1.实现onCreateView()方法,实现dialog
a.修改dialog的左右边距,使用window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));去除默认边距
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
Dialog dialog = getDialog();
Window window = dialog.getWindow();
if (window != null) {
//去除系统自带的margin
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//设置dialog在界面中的属性
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
}
}
b.系统的返回键或点击dialog旁边的位置,dialog都不消失
//点击旁边位置,dialog不消失
dialog.setCanceledOnTouchOutside(false);
//按系统返回键,dialog不消失
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
return keyCode == KeyEvent.KEYCODE_BACK;
}
});
c.DialogFragment和Activity/Fragment通信:使用监听
permission_dialog_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#fff"/>
<corners
android:radius="14dp"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools">
<RelativeLayout