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


当前回答

我也面临着同样的问题。为了处理它,我设置了一个对话框的OntouchListener,在里面什么都不做。但旋转屏幕时对话框也会消失。为了解决这个问题,我设置了一个变量来告诉我对话框是否正常解散。然后我设置了一个OnDismissListener到我的对话框,在里面我检查变量。如果对话框正常解散,我什么都不做,否则我再次运行对话框(并将他的状态设置为在我的情况下解散时)。

其他回答

使用这个代码,它为我工作

 AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
 alertDialog.setCancelable(false);

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

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

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

(PS:代码使用WindowManager.LayoutParams)

你实际上有一个活动(即使它看起来像一个对话框),因此你应该调用setFinishOnTouchOutside(false)从你的活动,如果你想保持它打开时,后台活动被单击。

编辑:这只适用于android API级别11或更高

简单地说,

alertDialog.setCancelable(false);

防止用户在对话框外单击。

Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true); 
//use this to dismiss the dialog on outside click of dialog

dialog.setCanceledOnTouchOutside(false);
//use this for not to dismiss the dialog on outside click of dialog.

观看这个链接了解更多关于对话的细节。

dialog.setCancelable(false);
//used to prevent the dismiss of dialog on backpress of that activity

dialog.setCancelable(true);
//used to dismiss the dialog on onbackpressed of that activity