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

Tengo una actividad que usa el estilo Theme.Dialog de modo 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 cuadro de diálogo se cierra. ¿Cómo puedo detener este comportamiento?

Esto podría ayudarte. Es una forma de manejar el evento táctil exterior:

¿Cómo cancelar una actividad temática de Diálogo como cuando se toca fuera de la ventana?

Al atrapar el evento y no hacer nada, creo que puedes evitar el cierre. Pero lo que es extraño, es que el comportamiento predeterminado de su diálogo de actividad no debe cerrarse cuando toque afuera.

(PD: el código usa WindowManager.LayoutParams)

Para evitar que el cuadro de diálogo se descarte al presionar la tecla Atrás, use esto

dialog.setCancelable(false); 

Y para evitar que el cuadro de diálogo se descarte en el toque externo, use esto

  dialog.setCanceledOnTouchOutside(false); 

Lo que en realidad tiene es una Actividad (incluso si parece un Diálogo), por lo tanto, debe llamar a setFinishOnTouchOutside(false) de su actividad si desea mantenerla abierta cuando se hace clic en la actividad de fondo.

EDITAR: Esto solo funciona con Android API nivel 11 o superior

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

 dialog.setCancelable(false); 

Para una API 10 más alta, el cuadro de diálogo desaparece cuando se toca afuera, mientras que en el cuadro inferior a la API 11, el cuadro de diálogo no desaparece. Para prevenir esto, debes hacer:

En styles.xml : false

O

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

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

Usa este código que está funcionando para mí

  AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); alertDialog.setCancelable(false); 

Establecer el diálogo cancelable como falso es suficiente, y si toca fuera del cuadro de diálogo de alerta o hace clic en el botón Atrás, desaparecerá el cuadro de diálogo de alerta. Entonces usa este:

setCancelable(false)

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

Si está creando un diálogo temporal y se pregunta dónde poner esta línea de código, aquí hay 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(); 
 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. 

Mire 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 the dialog on onbackpressed of that activity 

Simplemente,

 alertDialog.setCancelable(false); 

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

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

 setFinishOnTouchOutside(false); 

Use setFinishOnTouchOutside(false) para API> 11 y no se preocupe porque el comportamiento predeterminado de Android que el diálogo temático de actividad no terminará, toque externo para API <11 :). ¡¡¡¡¡Salud!

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 que ejecuta 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); 

Estaba enfrentando el mismo problema. Para manejarlo configuro un OntouchListener para el diálogo y no hago nada dentro. Pero Dialog descarta al rotar la pantalla también. Para solucionarlo, establecí una variable para decirme si el diálogo normalmente se ha descartado. Luego configuré un OnDismissListener en mi diálogo y en el interior OnDismissListener la variable. Si el diálogo se dismmis normalmente, no hago nada, o si no, ejecuto el cuadro de diálogo otra vez (y establezco su estado como cuando descarto en mi caso).

builder.setCancelable (falso);


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

También es posible asignar diferentes acciones implementando onCancelListener:

 alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){ @Override public void onCancel(DialogInterface dialogInterface) { //Your custom logic } }); 

Esta es la respuesta perfecta para todas sus preguntas … Espero que disfrute de la encoding en Android

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