阻止Android活动对话框在外部closures时closures
我有一个使用Theme.Dialog风格的活动,这是一个浮动的窗口在另一个活动。 但是,当我在对话框窗口(在后台活动上)之外单击时,对话框closures。 我怎样才能阻止这种行为?
这可以帮助你。 这是一个处理触摸外部事件的方式:
如何取消一个类似活动的对话窗口在窗口外面?
通过捕捉事件和无所事事,我认为你可以防止closures。 但是,奇怪的是,你的活动对话框的默认行为不应该在你外面触摸时closures。
(PS:代码使用WindowManager.LayoutParams)
为了防止对话框被退出按键使用这个
dialog.setCancelable(false);
而为了防止对话框在外部接触被解雇使用这个
dialog.setCanceledOnTouchOutside(false);
你实际上有一个活动(即使它看起来像一个对话框),因此如果你想在点击后台活动时保持打开,你应该从你的活动中调用setFinishOnTouchOutside(false)
。
编辑:这只适用于Android API级别11或更高
什么对我来说是创builddialogFragment设置它不可取消:
dialog.setCancelable(假);
对于更高的API 10,对话框在外部触摸时消失,而在低于API 11时,对话框不会消失。 为了防止这种情况,你需要做:
在styles.xml
: <item name="android:windowCloseOnTouchOutside">false</item>
要么
在onCreate()
方法中,使用: this.setFinishOnTouchOutside(false);
注意:对于API 10及更低版本,此方法不起作用,不需要。
使用此代码它正在为我工作
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); 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 teh dialog on onbackpressed of that activity
只是,
alertDialog.setCancelable(false);
防止用户在对话框外单击。
将可取消的对话框设置为false就足够了,或者在警报对话框之外触摸,或者单击后退button将使警报对话框消失。 所以使用这个:
setCancelable(false)
而另一个函数不再必要: dialog.setCanceledOnTouchOutside(false);
如果你正在创build一个临时对话框,并且想知道是否要放这行代码,这里是一个例子:
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();
我在onCreate()中使用这个,似乎在Android的任何版本上工作; testing5.0和4.4.x,不能testing姜饼,三星设备(注1运行GB)默认情况下是这样的:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setFinishOnTouchOutside(false); } else { getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); } super.onCreate(savedInstanceState);
为API> 11使用setFinishOnTouchOutside(false)
,不要担心,因为它的android的默认行为,活动主题对话框将无法完成外部API的接口<11 🙂 !!干杯!
alert.setCancelable(false); alert.setCanceledOnTouchOutside(false);
我想这会帮助你。它为我工作
这是我的解决scheme:
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select The Difficulty Level"); builder.setCancelable(false);
当在onCreate中使用对话框作为一个活动添加这个
setFinishOnTouchOutside(false);
我面临同样的问题。 为了处理它,我将一个OntouchListener
设置为对话框,并且不做任何事情。 但是Dialog在旋转屏幕时也会放弃。 为了解决这个问题,我设置了一个variables来告诉我对话框是否正常解除了。 然后我设置一个OnDismissListener
到我的对话框,并在里面检查variables。 如果对话框正常排除我没有,或者我再次运行对话框(并设置他的状态,因为在我的情况下解散)。
builder.setCancelable(假);
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(); }
也可以分配不同的动作实现onCancelListener:
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){ @Override public void onCancel(DialogInterface dialogInterface) { //Your custom logic } });