我有一个正在使用主题的活动。对话框样式,使其成为另一个活动上方的浮动窗口。但是,当我在对话框窗口外(在后台活动上)单击时,对话框关闭。我怎样才能阻止这种行为?


当前回答

将对话框可取消设置为false就足够了,并且您可以在警报对话框外触摸或单击后退按钮将使警报对话框消失。所以就用这个吧:

setCancelable(假)

另一个函数不再需要了: dialog.setCanceledOnTouchOutside(假);

如果你正在创建一个临时对话框,并想把这行代码放在那里,下面是一个例子:

new AlertDialog.Builder(this)
                        .setTitle("Trial Version")
                        .setCancelable(false)
                        .setMessage("You are using trial version!")
                        .setIcon(R.drawable.time_left)
                        .setPositiveButton(android.R.string.yes, null).show();

其他回答

对于更高的API 10,对话框在外部触摸时消失,而在低于API 11的情况下,对话框不会消失。为了防止这种情况,你需要做到:

xml: <项目名称=“android: windowcloseonteutside”>false</项目>

OR

在onCreate()方法中,使用:this.setFinishOnTouchOutside(false);

注:对于API 10及以下,此方法无效,也不需要。

builder.setCancelable(假);


Mensaje(视图v){

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("¿Quieres ir a el Menú principal?");
    builder.setMessage("Al presionar SI iras a el menú y saldras de la materia.");
    builder.setPositiveButton("SI", null);
    builder.setNegativeButton("NO", null);
    builder.setCancelable(false);
    builder.show();
}

这对你有帮助。它是处理touch outside事件的一种方式:

如何取消一个对话主题,如活动时触摸窗外?

通过捕捉事件,什么都不做,我认为你可以阻止关闭。但奇怪的是,你的活动对话框的默认行为应该是当你触摸外部时不关闭自己。

(PS:代码使用WindowManager.LayoutParams)

我在onCreate()中使用这个,似乎可以在任何版本的Android上工作;在5.0和4.4上测试。x,不能在姜饼上测试,三星设备(Note 1运行GB)默认是这样的:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
    {
        setFinishOnTouchOutside(false);
    }
    else
    {
        getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
    }

    super.onCreate(savedInstanceState);

在jetpack组合中,使用遣散onclickoutside = false属性来防止关闭。

    AlertDialog(
        title = {
            Text("Title")
        },
        text = {
            Text(text = name)
        },
        onDismissRequest = onDismiss,
        confirmButton = {
            TextButton(onClick = onDismiss ) {
                Text("Yes")
            }
        },
        dismissButton = {
            TextButton(onClick = onDismiss ) {
                Text("Cancel")
            }
        },
        properties = DialogProperties(
            dismissOnClickOutside = false
        )
    )

}