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?
- Cómo obtener la tasa de bits, tasa de muestreo y no. De canales de un archivo de audio en android
- Java.io.FileNotFoundException: Este archivo no se puede abrir como descriptor de archivo; Probablemente está comprimido
- ¿Por qué el campo PackageInfo.signatures es una matriz y cuándo debería haber algo distinto de un valor aquí?
- Android: onCreate no se ejecuta en una FragmentActivity cuando su XML correspondiente está inflada?
- ProGuard: ¿duplicado definición de biblioteca clase?
- XMPP con Java Asmack biblioteca que admite X-FACEBOOK-PLATFORM
- Error: solo se admiten ejecutables independientes de posición (PIE)
- Excepción Java.lang.Runtime: ¿Ha fallado la toma de imagen?
- ¿Descriptor de archivos, ejemplo de filtración?
- Mostrar números en el gráfico circular
- Recyclerview cambia la posición del artículo automáticamente cuando se desplaza
- Tamaño máximo al analizar XML con DOM
- Cómo obtener mi dirección IP de LAN (192.168.xxxx) (IPV4)
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 } });
- ¿Puedo hacer una solicitud síncrona con volea?
- Mostrar AlertDialog en cualquier posición de la pantalla