我有一个使用 Theme.Dialog 样式的活动,它是另一个活动上方的浮动窗口。但是,当我在对话框窗口外部(在后台活动上)单击时,对话框将关闭。我怎样才能阻止这种行为?
要防止按下后退键时对话框消失,请使用此
dialog.setCancelable(false);
为了防止对话框在外部触摸时被关闭,请使用此
dialog.setCanceledOnTouchOutside(false);
您实际上拥有的是一个 Activity(即使它看起来像一个对话框),因此如果您想在单击后台 Activity 时保持其打开状态,则应该从您的 Activity 中调用
setFinishOnTouchOutside(false)
。
编辑:这只适用于 Android API 级别 11 或更高版本
对我有用的是创建
DialogFragment
并将其设置为不可取消:
dialog.setCancelable(false);
这可以帮助你。这是一种处理外部触摸事件的方法:
如何在窗口外触摸时取消 Activity 等主题的 Dialog?
通过抓住事件而不采取任何行动,我认为您可以防止关闭。但奇怪的是,当您触摸外部时,活动对话框的默认行为应该是“不”自行关闭。 (PS:代码中使用了WindowManager.LayoutParams)
setFinishOnTouchOutside(false);
在
styles.xml
中:
<item name="android:windowCloseOnTouchOutside">false</item>
或
在
onCreate()
方法中,使用:
this.setFinishOnTouchOutside(false);
注意:对于 API 10 及更低版本,此方法无效,不需要。
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.setCanceledOnTouchOutside(false);
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
alertDialog.setCancelable(false);
防止用户在对话框之外单击。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
setFinishOnTouchOutside(false);
}
else
{
getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
}
super.onCreate(savedInstanceState);
setFinishOnTouchOutside(false)
,不用担心,因为 Android 的默认行为是活动主题对话框不会在 API 的外部触摸上完成
< 11 :) !!Cheerss!!
我想这会对你有帮助。它对我有用
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select The Difficulty Level");
builder.setCancelable(false);
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialogInterface) {
//Your custom logic
}
});
dismissOnClickOutside = 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
)
)
}
OntouchListener
,并且在里面什么都不做。但旋转屏幕时对话框也会关闭。为了解决这个问题,我设置了一个变量来告诉我对话框是否已正常关闭。然后我在对话框中设置了一个
OnDismissListener
,并在里面检查变量。如果对话框正常关闭,我什么也不做,否则我会再次运行对话框(并将其状态设置为在我的情况下关闭时的状态)。builder.setCancelable(false);
public void Mensaje(View 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();
}
new AlertDialog.Builder(this)
.setTitle("Akshat Rastogi Is Great")
.setCancelable(false)
.setMessage("I am the best Android Programmer")
.setPositiveButton("I agree", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();