He implementado un diálogo personalizado para mi aplicación. Quiero implementar eso cuando el usuario hace clic fuera del cuadro de diálogo, el cuadro de diálogo se cerrará. ¿Qué tengo que hacer para esto?
fuente
He implementado un diálogo personalizado para mi aplicación. Quiero implementar eso cuando el usuario hace clic fuera del cuadro de diálogo, el cuadro de diálogo se cerrará. ¿Qué tengo que hacer para esto?
Puede usar dialog.setCanceledOnTouchOutside(true);
cual cerrará el cuadro de diálogo si toca fuera del cuadro de diálogo.
Algo como,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
O si su cuadro de diálogo no es modelo, entonces,
1 - Establezca la bandera FLAG_NOT_TOUCH_MODAL
para el atributo de ventana de diálogo
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2 - Agregue otra bandera a las propiedades de Windows, FLAG_WATCH_OUTSIDE_TOUCH
- esta es para que el diálogo reciba un evento táctil fuera de su región visible.
3 - Anular el onTouchEvent()
diálogo y verificar el tipo de acción. si el tipo de acción es ' MotionEvent.ACTION_OUTSIDE
' significa, el usuario está interactuando fuera de la región de diálogo. Entonces, en este caso, puede oscurecer su diálogo o decidir qué desea realizar. ver plano?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
Para obtener más información, consulte ¿Cómo descartar un cuadro de diálogo personalizado basado en puntos de contacto? y Cómo descartar su diálogo no modal, cuando se toca fuera de la región del diálogo
Simplemente use
fuente
Puede usar esta implementación de onTouchEvent. Impide reaccionar debajo de la actividad al evento táctil (como se mencionó howettl).
Fuente: http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html
fuente
O, si está personalizando el cuadro de diálogo utilizando un tema definido en su estilo xml, ponga esta línea en su tema:
fuente
dialog.setCanceledOnTouchOutside(true);
funciona maravillosamentepara cerrar el diálogo al tocar afuera.
Y si no desea cerrar al tacto, use el siguiente código:
fuente
Este método debería evitar por completo las actividades debajo del área gris recuperando eventos de clic.
Elimine esta línea si la tiene:
Pon esto en tu actividad creada
luego anule el evento táctil con esto
fuente
Puedes probar esto: -
o
Y si tienes un
AlterDialog.Builder
Entonces puedes probar esto: -fuente
Este código se usa para cuando se hace clic en el cuadro de diálogo que oculta el tiempo de entrada y cuando el usuario hace clic en el lado exterior del cuadro de diálogo ese tiempo, tanto el softinput como el cuadro de diálogo están cerrados.
fuente
Otra solución, este código fue tomado del código fuente de Android
Window
. Debe agregar estos dos métodos al código fuente de su diálogo.Esta solución no tiene este problema:
fuente
Llama
dialog.setCancelable(false);
desde tu actividad / fragmento.fuente
Lo siguiente me ha funcionado:
fuente
Puede hacer que
background
ocupe todo el tamaño de la pantallatransparent
y escuchar elonClick
eventodismiss
.fuente
Aqui esta el codigo
Prueba este. puedes ocultar el teclado cuando tocas afuera
fuente