2010-10-17 13 views
8

¿cómo elimino el foco del elemento del menú de opciones? Es decir. cuando abro el menú por primera vez, ninguno de los elementos tiene foco. sin embargo, si me concentro en uno de ellos usando track ball, y luego cierro y vuelvo a abrir el menú, el foco sigue ahí. ¿Como me deshago de esto?menú de opciones - eliminación del enfoque del elemento

Estoy despejando y recreando el menú en onPrepareOptionsMenu (ya que tengo que ajustarlo al estado de actividad actual).

EDIT:

public boolean onPrepareOptionsMenu(Menu menu){ 
    menu.clear(); 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_menu, menu); 

    return true; 
} 
+2

¿Pudo encontrar la solución a esto? – dropsOfJupiter

+1

¿Se puede publicar el código para reproducir el problema? Estaré feliz de investigarlo por ti. Es un problema interesante. –

Respuesta

0

Una vez que utilice la rueda de desplazamiento (o, de hecho pulsa cualquier tecla en el teclado), se sale touch mode. A partir de ese momento, habrá alguna vista que tenga foco (puede ver esto llamando al Activity.getCurrentFocus()). Este modo persiste hasta que toque la pantalla nuevamente, en ese punto volverá a ingresar al modo táctil y cuando abra el menú en ocasiones subsiguientes, no habrá un elemento enfocado. Esto sucede en cada aplicación de Android que he visto con un menú.

Esta situación existe no solo para los elementos del menú de opciones, sino también para las vistas en su diseño. Una vez que abandone el modo táctil, no creo que haya una forma de volver a ingresarlo (y, por lo tanto, quitar el foco de todas las vistas) a menos que toque la pantalla. Una solución que he visto citada para eliminar los efectos visibles del enfoque (cuando no está en modo táctil) es simplemente dársela a un elemento que no es visible. ¿Podría crear una opción de menú invisible y darle enfoque cuando quiera borrarla?

A menos que encuentre una forma de programar, ingresar de manera confiable al modo táctil o quitar el foco de todas las vistas (¡llamar al View.clearFocus() simplemente lo pasa a otra vista!), Esta puede ser su mejor opción.

Cuestiones relacionadas