我有一个使用Theme.Dialog样式的活动,使其成为另一个活动上方的浮动窗口。然而,当我单击对话框窗口之外的区域(即背景活动)时,对话框会关闭。如何停止这种行为?
我有一个使用Theme.Dialog样式的活动,使其成为另一个活动上方的浮动窗口。然而,当我单击对话框窗口之外的区域(即背景活动)时,对话框会关闭。如何停止这种行为?
为了防止对话框在按下返回键时被关闭,请使用以下代码:
dialog.setCancelable(false);
为了防止对话框在外部触碰时被关闭,请使用以下方法
dialog.setCanceledOnTouchOutside(false);
setCancelable(false)
即可。 - Kobi Tate实际上,您拥有的是一个Activity(即使它看起来像一个Dialog),因此如果您希望在单击背景活动时保持其打开状态,则应从Activity中调用setFinishOnTouchOutside(false)
。
编辑:仅适用于Android API级别11或更高版本。
onBackPressed()
方法,并使其为空。 - Alex Bonel对我有效的方法是创建一个DialogFragment
并将其设置为不可取消:
dialog.setCancelable(false);
这可能有所帮助。这是一种处理触摸外部事件的方法:
通过捕获事件并不执行任何操作,我认为您可以防止对话框关闭。但令人奇怪的是,您的活动对话框的默认行为应该不是在您触摸外部时关闭自身。
(PS:代码使用WindowManager.LayoutParams)
在onCreate中将dialog作为一个activity使用时,请添加以下内容
setFinishOnTouchOutside(false);
对于API 10及以上版本,当触摸对话框之外的区域时,对话框会消失,而在API 11以下版本中,对话框不会消失。要防止这种情况,您需要执行以下操作:
在styles.xml
文件中:<item name="android:windowCloseOnTouchOutside">false</item>
或者
在onCreate()
方法中使用:this.setFinishOnTouchOutside(false);
注意:对于API 10及以下版本,此方法无效,也不需要使用。
将对话框的可取消属性设置为false就足够了,无论是在警报对话框外部触摸还是点击后退按钮都会使警报对话框消失。所以使用这个代码:
setCancelable(false)
而另一个函数已经不再必要:
dialog.setCanceledOnTouchOutside(false);
如果你正在创建一个临时对话框并想知道把这行代码放哪里,这里是一个例子:
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();
警告对话框已过时,请使用Dialog dialog = new Dialog(this)。
要防止在外部触摸时关闭,请使用以下代码:
dialog.setCanceledOnTouchOutside(false);
使用这段代码,对我来说有效
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
.setCanceledOnTouchOutside(false)
只能在 .create()
之后访问。 - francisDialog 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