应用场景:弹出一个对话框,点击对话框以外不关闭,点击返回键不关闭,输入值不符合要求点击确定按钮不关闭,输入值正确后才关闭。
1.点击对话框以外不关闭,修改一个设置项,代码如下:
.setCancelable(false);
2.点击返回键不关闭,添加对话框对返回键的监听,代码如下:
.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog,int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
return true;
} else {
return false; // 默认返回 false
}
}
});
3.对话框上的确定点击不关闭,确定按钮设置监听,代码如下:
.setPositiveButton("确定", null);//如果在null的位置设置监听,只要点击就会关闭对话框。
//确定按钮的监听设置
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String input=et.getText().toString();
if(input.equals("")){
return;
}else{
//添加执行操作
dialog.dismiss();
}
}
});
在第三点的时候遇到一个问题,就是.getButton(AlertDialog.BUTTON_POSITIVE) 返回值是null,解决办法是:.show()要在.getButton(AlertDialog.BUTTON_POSITIVE) 前面。
特此做个记录,如果哪里写错了,还请指正。
完整代码如下:
final EditText et = new EditText(this);
Builder builder=new AlertDialog.Builder(this)
.setTitle("搜索")
.setIcon(android.R.drawable.ic_dialog_info)
.setView(et)
.setCancelable(false)
.setPositiveButton("确定", null)
.setOnKeyListener(
new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog,int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
return true;
} else {
return false; // 默认返回 false
}
}
});
final AlertDialog dialog=builder.create();
dialog.show();//先调用
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String input=et.getText().toString();
if(input.equals("")){
return;
} else {
//添加执行操作
dialog.dismiss();
}
}
});