1、默认来说DialogFragment是不全屏的,需要以下代码进行设置
/**
* Activity创建后才会有window
*/
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//设置全屏
getDialog().getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
}
2、外侧背景透明问题
DialogFragment对话框有两层,一层是外部的背景,默认是半透明的,由以下代码进行更改
@Override
public void onStart() {
super.onStart();
//去除背景
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.dimAmount = 0.0f;
window.setAttributes(windowParams);
}
内层的背景默认是白色的,如果自定义的布局背景是半透明的图片,需要把背景改下,否则半透明图片会不生效
/**
* Activity创建后才会有window
*/
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//需要这一行来解决对话框背景有白色的问题(颜色随主题变动)
}
3、不管对话框显示多少次,都用同一个dialog的实例,但是传参数的时候,参数都可以进行改变,例如:
MainActivity.java
private TestDialog dialog;
private void showDialog(){
if(null == dialog){
dialog = new TestDialog();
}
Bundle bundle = new Bundle();
bundle.putInt("test",1);
settingTimeDialog.setArguments(bundle);
settingTimeDialog.show(getSupportFragmentManager(),"");
}
TestDialog.java
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle bundle = getArguments();
if (null != bundle){
int test = bundle.getInt(test,8000);//每次调用show进行显示的时候都会执行这个方法获取参数
}
}
4、设置对话框内全局按键监听,当对话框显示时候,所有遥控器按键均可以监听
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
Log.e("YM","按键:"+keyCode);
return false;
}
});
}
5、点击空白处禁止关闭
1、
setCanceledOnTouchOutside(false):调用这个方法时,按对话框以外的地方不起作用。按返回键还起作用。
setCanceledOnTouchOutside(true):点击灰色空白处关闭弹框。
2、
setCanceleable(false);调用这个方法时,按对话框以外的地方不起作用。按返回键也不起作用
注意:setCanceledOnTouchOutside(true)如果需要起作用,不能设置setCanceleable(false),如果设置为false,则不起作用。