Evitar que el diálogo de actividad de Android se cierre en el exterior

Tengo una actividad que está utilizando el estilo Theme.Dialog tal que es una ventana flotante sobre otra actividad. Sin embargo, cuando hago clic fuera de la ventana de diálogo (en la actividad de fondo), el diálogo se cierra. ¿Cómo puedo detener este comportamiento?

Esto podría ayudarle. Es una manera de manejar el evento de toque exterior:

¿Cómo cancelar un diálogo temático como Actividad cuando se toca fuera de la ventana?

Al atrapar el evento y no hacer nada, creo que puede evitar el cierre. Pero lo que es extraño, sin embargo, es que el comportamiento predeterminado de su diálogo de actividad debe ser no cerrar cuando toque fuera.

(PS: el código utiliza WindowManager.LayoutParams)

Para evitar que el cuadro de diálogo se retire en la tecla de retroceso presionado utilice este

dialog.setCancelable(false); 

Y para evitar que el cuadro de diálogo se rechace en el exterior toque use esto

  dialog.setCanceledOnTouchOutside(false); 

Lo que realmente tienes es una Actividad (aunque parezca un Diálogo), por lo tanto deberías llamar a setFinishOnTouchOutside(false) de tu actividad si quieres mantenerla abierta cuando se hace clic en la actividad de fondo.

EDIT: Esto sólo funciona con la API de Android de nivel 11 o superior

Lo que funcionó para mí fue crear dialogFragment y configurarlo para que no sea cancelable:

Dialog.setCancelable (false);

Para API 10 más alta, el cuadro de diálogo desaparece cuando se toca fuera, mientras que en inferior a API 11, el cuadro de diálogo no desaparece. Para evitar esto, usted necesita hacer:

En styles.xml : <item name="android:windowCloseOnTouchOutside">false</item>

O

En el método onCreate() , use: this.setFinishOnTouchOutside(false);

Nota: para API 10 e inferior, este método no tiene efecto y no es necesario.

Utilice este código para mí

  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. 

Vea este enlace para más detalles sobre el diálogo.

 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 

Utilice setFinishOnTouchOutside(false) para API> 11 y no se preocupe porque el comportamiento predeterminado de su android que el diálogo de temática de la actividad no terminará en el toque externo para API <11 :)!

Yo uso esto en onCreate (), parece funcionar en cualquier versión de Android; Probado en 5.0 y 4.4.x, no puede probar en Gingerbread, los dispositivos Samsung (Nota 1 en funcionamiento GB) lo tienen de esta manera por defecto:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setFinishOnTouchOutside(false); } else { getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); } super.onCreate(savedInstanceState); 
  alert.setCancelable(false); alert.setCanceledOnTouchOutside(false); 

Supongo que esto te ayudará. Trabajó para mí

Aquí está mi solución:

 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select The Difficulty Level"); builder.setCancelable(false); 

El ajuste del cuadro de diálogo cancelable para que sea falso es suficiente y si toca fuera del cuadro de diálogo de alerta o si hace clic en el botón de retroceso, el cuadro de diálogo de alerta desaparecerá. Así que utilice este:

setCancelable(false)

Y la otra función ya no es necesaria: dialog.setCanceledOnTouchOutside(false);

Si está creando un diálogo temporal y preguntándose allí para poner esta línea de código, he aquí un ejemplo:

 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(); 

Yo estaba enfrentando el mismo problema. Para manejarlo, establezco un OntouchListener en el diálogo y no hago nada dentro. Pero Dialog descartar al girar la pantalla también. Para solucionarlo, establezco una variable para decirme si el diálogo normalmente se ha descartado. Entonces OnDismissListener un OnDismissListener a mi diálogo y adentro compruebo la variable. Si el diálogo tiene dismmiss normalmente no hago nada, o bien vuelvo a ejecutar el diálogo de nuevo (y establecer su estado como cuando despedir en mi caso).

Builder.setCancelable (false);


Public void Mensaje (Ver 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(); } 

Al usar el diálogo como una actividad en el onCreate, agregue esto

 setFinishOnTouchOutside(false); 

Simplemente,

 alertDialog.setCancelable(false); 

Evitar que el usuario haga clic fuera del cuadro de diálogo.

También es posible asignar diferentes acciones implementando onCancelListener:

 alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){ @Override public void onCancel(DialogInterface dialogInterface) { //Your custom logic } }); 
  • Solución automática de laberinto
  • Cargar archivos de android (java) a un servidor mediante PHP
  • Java.lang.NoSuchMethodError: Ninguna clase de método de interfaz (Ljava / util / Comparator;) excepción en la clasificación de arraylist android
  • ¿Por qué la adición de una instrucción If dentro de este método lo ralentiza tan drásticamente?
  • Problemas para implementar el nuevo cliente de GCM para Android
  • Llamadas de bloqueo de Android Canvas IllegalArgumentException
  • Cómo obtener la velocidad de desplazamiento en un ListView?
  • error: no hay identificador de recurso para el atributo 'srcCompat'
  • La fuente personalizada da un glifo incorrecto para ciertas combinaciones de letras en Android
  • Uso de certificados de cliente / servidor para la autenticación de dos vías socket SSL en Android
  • HttpURLConnection solicitud de ser golpeado dos veces en el servidor para descargar el archivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.