Java 当用户单击外侧时,警报对话框消失

Java 当用户单击外侧时,警报对话框消失,java,android,xml,android-studio,Java,Android,Xml,Android Studio,大家好,我有一个带有两个文本框的警报框,这里的问题是,当用户在弹出窗口外单击时,警报对话框消失了,或者当用户单击“确定”按钮时,警报对话框也消失了 所以请在这方面帮助我 先谢谢你 final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); builder.setTitle("Sign In Failed"); final EditText input1=new EditText(MainActivit

大家好,我有一个带有两个文本框的警报框,这里的问题是,当用户在弹出窗口外单击时,警报对话框消失了,或者当用户单击“确定”按钮时,警报对话框也消失了

所以请在这方面帮助我 先谢谢你

final AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Sign In Failed");
final EditText input1=new EditText(MainActivity.this);
final EditText input2=new EditText(MainActivity.this);
input1.setHint("eNTER name1");
input2.setHint("Enter Name2");
LinearLayout linearLayout= new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
builder.setMessage("Invalid username or password");
linearLayout.addView(input1);
linearLayout.addView(input2);
builder.setView(linearLayout);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
    }
});
builder.show();

只需将可取消设置为false:

.setCancelable(false)

因为默认情况下它是可取消的

在builder.setView(linearLayout)之后添加此选项-

更新

根据下面的代码片段-

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
    }
});
单击“确定”按钮时,您正在设置
对话框。取消()
如果不执行此操作,您应该根据需要在单击“确定”按钮时设置一些操作

见此:

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel(); // close the current dialog
        }
    });

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

           //Perform any Intent Action or perform validation as you want

         }
    });
更新2

只需复制并粘贴下面的代码-工作完美

 final EditText input1 = new EditText(MainActivity.this);
        final EditText input2 = new EditText(MainActivity.this);
        input1.setHint("Enter name1");
        input2.setHint("Enter Name2");
        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        linearLayout.addView(input1);
        linearLayout.addView(input2);

        final AlertDialog builder = new AlertDialog.Builder(MainActivity.this)
                .setTitle("Sign In Failed")
                .setCancelable(false)
                .setMessage("Invalid username or password").setView(linearLayout).setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                }).create();
        builder.show();
        builder.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (input1.length() <= 0) {
                    Toast.makeText(MainActivity.this, "Please Enter Name", Toast.LENGTH_SHORT).show();

                } else {
                    Toast.makeText(MainActivity.this, "OK", Toast.LENGTH_SHORT).show();
                    builder.dismiss();
                }
            }
        });
final EditText input1=新的EditText(MainActivity.this);
最终编辑文本输入2=新编辑文本(MainActivity.this);
input1.setHint(“输入name1”);
input2.setHint(“输入Name2”);
LinearLayout LinearLayout=新的LinearLayout(本);
linearLayout.setOrientation(linearLayout.VERTICAL);
linearLayout.addView(输入1);
linearLayout.addView(输入2);
最终AlertDialog生成器=新建AlertDialog.builder(MainActivity.this)
.setTitle(“登录失败”)
.setCancelable(错误)
.setMessage(“无效的用户名或密码”).setView(linearLayout).setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
}
}).create();
builder.show();
builder.getButton(AlertDialog.BUTTON_正值).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){

如果(input1.length()需要将外部触摸设置为false,请尝试以下操作:

setCanceledOnTouchOutside(false);

这也会在用户单击backbutton时使对话框消失,也许这对OP来说不是问题,但我只是想指出。嗨,Onkar,我尝试过builder.setCancelable(false);工作正常,但我的setPositiveButton()中有一些验证方法如果我单击“确定”按钮,弹出消息将消失。请在这方面帮助我,这是因为您正在设置dialog.cancel();在“确定”按钮上单击。使用负按钮作为“取消”,然后在“取消”内单击“使用对话”。cancel()。如果您想在单击“确定”按钮时执行任何操作,请使用Intent。顺便说一句,您想在单击“确定”按钮时执行的操作??您好,我在setPositive()中的验证是(input1.lengthHi Onkar,当用户在input1字段中输入一些文本时,我需要取消对话框,否则我需要通过提供toast消息来限制他,弹出消息不应关闭。Hi Onkar,我尝试了builder.setCancelable(false);工作正常,但我的setPositiveButton()中有一些验证)方法如果我单击“确定”按钮,弹出消息将消失。请在这方面帮助我setPositive()内的验证是如果(input1.lengthif)(input1.lenghtHi muzamil,我已尝试了您的代码示例,但它不起作用。Ram您是否删除了dialog.cancel行
setCanceledOnTouchOutside(false);