7

我的活动中有一个警报对话框,不希望用户可以通过单击对话框外部来关闭它。根据我的研究(像这样),我找到了setCanceledOnTouchOutside(false);方法。但是,我无法在我的应用程序中使用它,并且可以在使用此方法时关闭对话框。

这是我的代码:

private AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setTitle("");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
        switch (intAlertAction) {
            case 1:
            case 2:
            case 3:
            default:
        }
}
});

任何建议将不胜感激。

4

4 回答 4

29

setCanceledOnTouchOutside仅通过单击对话框外部来防止关闭。但是您仍然可以使用后退按钮将其关闭。

如果您不希望您的对话框完全可以取消,请使用dialog.setCancelable(false)

我刚刚测试了您的(固定)代码,它按预期工作:用户在单击它时无法关闭对话框。试试看:

    AlertDialog alertDialog;
    alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setCanceledOnTouchOutside(false);
    alertDialog.setTitle("");
    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            });
    alertDialog.show();
于 2012-11-23T10:03:54.620 回答
7

这是一个有趣的问题,我想我知道你的答案。

我一直在不同平台上测试应用程序,我注意到它们之间存在细微差别。在 android 4.0 以上,当您触摸 Toast 消息时,它就会消失。我想对话框(和 AlertDialogs)也是如此。触摸时它只是“消失”(但它没有被解雇! - 只是看不到)。

希望它有所帮助!

于 2012-11-26T14:59:17.093 回答
3

只需添加dialog.setCancelable(false)以禁用后退按钮。

于 2016-05-05T07:50:43.833 回答
2

添加setCancelable(false)您的AlertDialog示例:

AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setCancelable(false);
alertDialog.setTitle("");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
alertDialog.show();
于 2012-11-23T11:27:39.307 回答