Tengo un PopupWindow en mi actividad, lo que pasa es que mi PopupWindow todavía se muestra incluso cuando estoy interactuando con mi actividad (por ejemplo, desplazándome por mi lista). Puedo desplazarme por mi lista y PopupWindow sigue ahí.
Lo que quiero lograr es cuando estoy tocando / desplazándome / haciendo clic / etc en la pantalla que no es PopupWindow, quiero descartar la PopupWindow. Como funciona un menú. Si hizo clic fuera del menú, el menú se cerrará.
Lo intenté, setOutsideTouchable(true)
pero no cerrará la ventana. Gracias.
android
popupwindow
android-menu
aldeano
fuente
fuente
BitmapDrawable()
está depurado. Úselo en suColorDrawable()
lugar.Descubrí que ninguna de las respuestas proporcionadas me funcionó, excepto el comentario de WareNinja sobre la respuesta aceptada, y el de Marcin S. probablemente también funcione. Aquí está la parte que me funciona:
Alternativamente:
No estoy seguro de cuáles son las diferencias, pero el código fuente de ListPopupWindow en realidad usa este último cuando su modalidad se establece en verdadera con setModal, por lo que al menos los desarrolladores de Android consideran que este es un enfoque viable, y es solo una línea.
fuente
setFocusable
, debemos hacer clic en el botón dos veces (donde el botón se coloca fuera de la ventana emergente) donde, como en el primer método, funciona bien :)BitmapDrawable()
esta depricada. Úselo en suColorDrawable()
lugar.Me encontré con los mismos problemas y los solucioné como los siguientes códigos. Funciona bien para mí.
Por cierto, no use el constructor obsoleto BitmapDrawable, use este nuevo ColorDrawable (android.R.color.transparent) para reemplazar el fondo predeterminado.
Que te diviertas@.@
fuente
Sé que es tarde, pero noto que la gente todavía tiene problemas con la ventana emergente. He decidido escribir un ejemplo completamente funcional en el que puede descartar la ventana emergente tocando o haciendo clic fuera de ella o simplemente tocando la ventana misma. Para hacerlo, cree una nueva clase PopupWindow y copie este código:
PopupWindow.class
Ahora cree el diseño para la ventana emergente: popup.xml
En su actividad principal, cree una instancia de la clase PopupWindow:
donde YOUR_MAIN_LAYOUT es el diseño de la actividad actual en la que popupWindow aparecerá
fuente
Gracias por la respuesta de @ LunaKong y la confirmación de @ HourGlass. No quiero hacer un comentario duplicado, solo quiero que sea claro y conciso.
Mttdat.
fuente
Para
ListPopupWindow
establecer la ventana para que sea modal cuando se muestra.De esa forma, al hacer clic fuera de la
ListPopupWindow
se descartará.fuente
mListPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
para evitar que la ventana emergente interfiera con el teclado en pantalla.Tenga en cuenta que para cancelar con
popupWindow.setOutsideTouchable(true)
, debe hacer el ancho y el altowrap_content
como el siguiente código:fuente
Descartará PopupWindow cuando haga clic / toque en la pantalla. Asegúrese de haber establecido focusable verdadero antes de showAtLocation.
fuente
Puedes usar
isOutsideTouchable
ORisFocusable
para descartar la ventana emergente cuando toque afueraNota
Actualmente, después de la prueba veo
setBackgroundDrawable
que no nos ayudan a descartar la ventana emergenteSi observa el código para descartar en
PopupWindow
(PopupWindow->PopupDecorView->dispatchKeyEvent
yPopupWindow->PopupDecorView->onTouchEvent
). Verá que cuando presionan el botón Atrás, se desconectanACTION_UP
y cuando se tocan afuera, se desconectan enACTION_UP
oACTION_OUTSIDE
fuente
fuente
El trabajo de sugerencia de @LunaKong es como un encanto.
Pero configurando mPopupWindow.setFocusable (false). elimina el toque innecesario necesario para hacer desaparecer la ventana emergente.
Por ejemplo: consideremos que hay una ventana emergente visible en la pantalla y está a punto de hacer clic en un botón. Entonces, en este caso, (si mpopwindow.setFocusable (true)) en el primer clic de un botón, la ventana emergente se cerrará. Pero debe hacer clic nuevamente para que el botón funcione. if ** (mpopwindwo.setFocusable (false) ** un solo clic del botón descarta la ventana emergente y activa el clic del botón . Espero que ayude.
fuente
Establezca el fondo de la ventana transparente:
Después de configurar su fondo en el diseño. Funciona bien.
fuente
En algunos casos, hacer que la ventana emergente se pueda enfocar no es deseable (por ejemplo, es posible que no desee que robe el enfoque de otra vista).
Un enfoque alternativo es usar un interceptor táctil:
fuente
Si esta ventana emergente es otra actividad, y disminuyó su tamaño a la pantalla original y desea habilitar o deshabilitar el área exterior, simplemente puede habilitar o deshabilitar el área exterior con este código:
habilitar:
YourActivity.this.setFinishOnTouchOutside(true);
inhabilitar:
YourActivity.this.setFinishOnTouchOutside(false);
fuente
Use Ver popupView para cerrar la ventana emergente
`Si usa esto, también puede establecerOnClickListener en cualquier botón dentro de la ventana emergente
fuente