Android 设置 Dialog 点击屏幕不消失
在开发的时候遇到一个问题,就是一触摸对话框边缘外部,对话框会自动消失。这个问题很纠结啊,查找了一下发现从Android 4.0开始,AlertDialog有了变化,就是在触摸对话框边缘外部,对话框会自动消失,查了源码,找到解决办法:
研究其父类时候发现,可以设置这么一条属性,在AlertDialog.Builder.create()之后才能调用这两个方法
方法一:
setCanceledOnTouchOutside(false);调用这个方法时,按对话框以外的地方不起作用。按返回键还起作用
方法二:
setCancelable(false);调用这个方法时,按对话框以外的地方不起作用。按返回键也不起作用
这两个方法都属于Dialog方法,可查阅源码。
修改后的源码如下:
dismissDialog(1);
new Builder(SplashActivity.this).setTitle("提示").setCancelable(false)
.setMessage("获取软件初始化信息失败!\n请检查网络是否通畅。")
.setPositiveButton("确认", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
SplashActivity.this.finish();
}
}).show();
AlertDialog点击按钮后对话框不消失的处理方法
我们在使用AlertDialog时,无论点击“确定”(PositiveButton)还是“取消”(NegativeButton),对话框都会消失,这其实是不合理的。如果遇到这种情况:AlertDialog里面有一个文本框,要求用户必须输入内容,但如果用户没有输入就点击了确定,这时对话框是不应该消失的,而是应该保留该对话框并提示用户必须输入文字。
解决办法:
final AlertDialog dialog = new AlertDialog.Builder(mContext).setView(view).setPositiveButton("确定", null)
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
//这里必须要先调show()方法,后面的getButton才有效
dialog.show();
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(et.getText())) {
showToast("文字不能为空");
return;
}
dialog.dismiss();
}
});
也就是说,在创建AlertDialog时setPositiveButton方法的OnClickListener参数需传入null,然后让dialog show出来以后,再通过getButton(AlertDialog.BUTTON_POSITIVE)方法重新得到确定按钮,重设点击事件,这时如果不手动去调dialog.dismiss(),对话框就不会消失了。