|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Toolbar, DrawerLayout, Menú vacío y onBackPressed
Es la primera vez que creo un post en esta sección, normalmente lo que hago es responderlos
![]() Voy a explicar un problema que me ha pasado esta mañana, y que no se si es cosa de mi móvil o pasará con todos Aunque no lo indique, todo lo que explico a continuación es usando AppCompat, aunque el móvil es Lollipop. Normalmente nunca uso Toolbar, suelo poner el botón de menú a la izquierda, un menú en el centro y un SearchView a la derecha, todo a mano. Pero estoy haciendo una aplicación nueva para una empresa que quieren cosas muy visuales, así que me he puesto con el Toolbar para poder añadir el ActionBarDrawerToggle (el botón de menú que se convierte en una flecla y viceversa según el % que esté abierto el DrawerLayout). Pues bien, hago mi Toolbar, le quito el Title, le pongo un logo, le añado el DrawerLayout y su configuración, le añado el SearchView mediante un menú de la siguiente manera: [PHP] <item android:id="@+id/search" android:title="@string/buscar" android:icon="@android:drawable/ic_menu_search" myapp:showAsAction="always" myapp:actionViewClass="android.support.v7.widget.S earchView"/> [/PHP] Añado mi código para que funcione de esta otra: [PHP] getMenuInflater().inflate(R.menu.menu_principal, menu); return true; [/PHP] Y todo funciona perfecto, pero en estas que pulso el botón de menú del móvil (tengo un S5, el botón de menú en una pulsación larga en el botón que muestra las apps abiertas) y al pulsar atrás el método onBackPressed() no se ejecuta. Le pongo puntos de interrupción y nada. Si no pulso menú todo funciona perfecto, pero si lo pulso bloqueada, no puedes salir. Si abro el DrawerLayout y pulso atrás se cierra, pero el onBackPressed no se ejecuta. En estás que cambio el "always" del SearchView a "never", la lupa no sale, pero al pulsar menú aparece el texto "Buscar" (que no hace nada) pero el onBackPressed si funciona. Así que vuelvo a ponerlo a "always" y añado otra opción de menú más, quedando así: [PHP] <item android:id="@+id/search" android:title="@string/buscar" android:icon="@android:drawable/ic_menu_search" myapp:showAsAction="always" myapp:actionViewClass="android.support.v7.widget.S earchView"/> <item android:id="@+id/acercade" android:title="@string/acercade" myapp:showAsAction="never" /> [/PHP] Ahora además de la lupa me aperecen los 3 puntos verticales. Si los pulso aparece la opción "Acerca de" arriba, si pulso el botón de menú aparece "Acerca de" abajo. Y el OnBackPressed() funciona perfectamente. Y después de todo este rollazo que dejo aquí por si alguien se encuentra el mismo problema es. ¿A alguien más le ha pasado esto y ha encontrado una forma menos chapuza de solucionarlo? Un saludo. |
Gracias de parte de: | ||
|
#2
|
||||
|
||||
A ver si se pasa kriogeN por aquí y te lo soluciona en un momento. Oh, espera... O_O tiene que haber un fallo en matrix.
Supongo que cualquier cosa que pueda decirte ya la habrás visto. Hay un hilo en stackoverflow interesante donde discuten que el DrawerLayout se queda los onBackPressed para él y cómo evitarlo. No es lo mismo, pero quizá haya un problema de focos cuando hay menú vacío y sea cuestión de dar el foco al elemento que corresponda. Por si te inspira algo nada más... http://stackoverflow.com/questions/1...on-drawer-open
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#3
|
||||
|
||||
A ver si se pasa kriogeN por aquí y te lo soluciona en un momento. Oh, espera... O_O tiene que haber un fallo en matrix.
Supongo que cualquier cosa que pueda decirte ya la habrás visto. Hay un hilo en stackoverflow interesante donde discuten que el DrawerLayout se queda los onBackPressed para él y cómo evitarlo. No es lo mismo, pero quizá haya un problema de focos cuando hay menú vacío y sea cuestión de dar el foco al elemento que corresponda. Por si te inspira algo nada más... http://stackoverflow.com/questions/1...on-drawer-open ![]() (Lo del DrawerLayout es un espectáculo, estas cosas no me pasaban cuando las hacía sin el Toolbar, o no se si será por la librería de soporte 23, la última que usaba era la 19. Pero ya he migrado POR FIN a Android Studio y uso todo nuevo) Parece que el que se queda el foco es el Toolbar, voy a ponerlo eso mismo al Toolbar a ver si así se soluciona. Ya diré algo. EDIT: Pues no, no es el Toolbar. Si tampoco es importante, al final la opción de "Acerca de" la usaré, pero es simplemente porque me joden estas cosas que no tienen sentido ![]() Última edición por kriogeN Día 16/09/15 a las 12:44:04. |
#4
|
||||
|
||||
Me tocó hacer una aplicación con SearchView y Toolbar y tambien me dio problemas al abrir el SearchView, pero de tema que no cuadraba bien con los otros iconos del menu (tenia que tener searchview y otro icono). Se solapaba con el otro icono, y el otro aparecia como encima del SearchView.
Al final lo solucione a lo chapuza, con referencias a los MenuItem (y una guarrada con Handler.postDelayed para las rotaciones que mejor no cuento, porque aun me siento sucio) Te recomiendo que pongas un issue en el tracker, a ver si hay suerte. Yo que se, por intentar buscarle alguna logica Bienvenido hombre, ya tocaba! ![]()
__________________
Última edición por Dexafree Día 16/09/15 a las 23:10:13. |
#5
|
||||
|
||||
Estooo, si el onBackPressed no se llama es como si la actividad que contiene los fragments hubiera perdido el foco. Si pones un punto de ruptura cuando salta el Search, en el debugger que Actividad ves como la que manda?? Por curiosidad más que nada, no sé si te ayudará. Quizá este es tu mismo problema: http://stackoverflow.com/questions/1...w-is-activated |
#6
|
||||
|
||||
Me tocó hacer una aplicación con SearchView y Toolbar y tambien me dio problemas al abrir el SearchView, pero de tema que no cuadraba bien con los otros iconos del menu (tenia que tener searchview y otro icono). Se solapaba con el otro icono, y el otro aparecia como encima del SearchView.
Al final lo solucione a lo chapuza, con referencias a los MenuItem (y una guarrada con Handler.postDelayed para las rotaciones que mejor no cuento, porque aun me siento sucio) Te recomiendo que pongas un issue en el tracker, a ver si hay suerte. Sera tonto de preguntar, pero si usas el Drawer usaras fragments... no estaras haciendo override en algun fragment y no llamando a super.onBackPressed..? Yo que se, por intentar buscarle alguna logica Bienvenido hombre, ya tocaba! ![]() ![]() No se cual es el problema, pero si pulsas el botón de Menú teniendo como único elemento un SearchView con la opción de que esté siempre en la Toolbar el onBackPressed deja de funcionar, por lo menos en el S5. |
#7
|
||||
|
||||
Si, uso Fragments, pero en el momento del problema aún no tenía ningún Fragment cargado. Estaba construyendo la Toolbar y el Drawer y de pronto he dejado puesto el dedo en el botón izquierdo del S5 (Menú) y me he dado cuenta que al pulsar atrás no salía de la app. Y ahí ha empezado todo.
No se cual es el problema, pero si pulsas el botón de Menú teniendo como único elemento un SearchView con la opción de que esté siempre en la Toolbar el onBackPressed deja de funcionar, por lo menos en el S5. ![]() |
![]() |
![]() |
||||||
|