阻止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 } });