Me gustaría que todos los elementos del menú que no encajan en la barra de acciones vayan al menú de desbordamiento (al que se accede desde la barra de acción, no desde el botón de menú) incluso en dispositivos que sí tienen un botón de menú . Esto parece mucho más intuitivo para los usuarios que incluirlos en una lista de menú separada que requiere que el usuario salte de una interacción táctil (pantalla) a una interacción basada en botones simplemente porque el diseño de la barra de acciones no puede caber en la barra.
En el emulador puedo establecer el valor de "Teclas de Atrás / Inicio de Hardware" en "no" y obtener este efecto. He buscado una manera de hacer esto en código para un dispositivo real que tiene un botón de menú pero no puede encontrar uno. ¿Alguien puede ayudarme?
fuente
También puedes usar este pequeño truco aquí:
Un buen lugar para ponerlo sería el
onCreate
método de su clase de aplicación.Obligará a la aplicación a mostrar el menú de desbordamiento. El botón de menú seguirá funcionando, pero abrirá el menú en la esquina superior derecha.
[Editar] Ya que ha aparecido varias veces: este truco solo funciona para el ActionBar nativo introducido en Android 3.0, no ActionBarSherlock. Este último usa su propia lógica interna para decidir si mostrar el menú de desbordamiento. Si usa ABS, todas las plataformas <4.0 son manejadas por ABS y, por lo tanto, están sujetas a su lógica. El truco seguirá funcionando para todos los dispositivos con Android 4.0 o superior (puede ignorar con seguridad Android 3.x, ya que en realidad no hay tabletas con un botón de menú).
Existe un ForceOverflow-Theme especial que forzará el menú en ABS, pero aparentemente se eliminará en futuras versiones debido a complicaciones .
fuente
Field
elija estajava.lang.reflect.Field
;)Solía solucionarlo definiendo mi menú de esta manera (también con el icono ActionBarSherlock usado en mi ejemplo)
Admito que esto puede requerir una "gestión de desbordamiento" manual en su xml, pero esta solución me pareció útil.
También puede forzar al dispositivo a usar el botón HW para abrir el menú de desbordamiento, en su actividad:
:-)
fuente
Si está utilizando la barra de acción de la biblioteca de soporte (
android.support.v7.app.ActionBar
), use lo siguiente:fuente
El sistema de diseño de desarrolladores de Android previene este tipo de método, pero encontré una forma de pasarlo:
Agregue esto a su archivo de menú XML:
A continuación, cree una clase llamada 'AppPickActionProvider' y copie el siguiente código:
fuente
Bueno, creo que Alexander Lucas ha proporcionado (desafortunadamente) la respuesta correcta, así que la marco como la "correcta". La respuesta alternativa que agrego aquí es simplemente señalar a los lectores nuevos a esta publicación en el blog de Desarrolladores de Android como una discusión bastante completa del tema con algunas sugerencias específicas sobre cómo lidiar con su código al pasar del nivel 11 anterior a la nueva barra de acción.
Todavía creo que fue un error de diseño no hacer que el botón de menú se comportara como un botón redundante de "Desbordamiento de acción" en dispositivos habilitados para botón de menú como una mejor manera de hacer la transición de la experiencia del usuario, pero su agua debajo del puente en este punto.
fuente
No estoy seguro de si esto es lo que está buscando, pero creé un submenú dentro del menú de la barra de acciones y configuré su icono para que coincida con el icono del menú de desbordamiento. Aunque no tendrá elementos enviados automáticamente (es decir, debe elegir lo que siempre está visible y lo que siempre está desbordado), me parece que este enfoque puede ayudarlo.
fuente
En la aplicación de Gmail que viene con ICS preinstalado, el botón de menú se deshabilita cuando tiene varios elementos seleccionados. El menú de desbordamiento está "forzado" a activarse mediante el uso del botón de desbordamiento en lugar del botón de menú físico. Hay una biblioteca de terceros llamada ActionBarSherlock que le permite "forzar" el menú de desbordamiento. Pero esto solo funcionará en el nivel API 14 o inferior (pre-ICS)
fuente
Si usa la barra de herramientas , puede mostrar el desbordamiento en todas las versiones y todos los dispositivos, lo he probado en algunos dispositivos 2.x, funciona.
fuente
Lo siento si este problema está muerto.
Esto es lo que hice para resolver el error. Fui a diseños y creé dos que contenían barras de herramientas. Uno era un diseño para sdk versión 8 y el otro era para sdk versión 21. En la versión 8, usé android.support.v7.widget.Toolbar mientras usaba android.widget.Toolbar en el diseño sdk 21.
Luego inflo la barra de herramientas en mi actividad. Compruebo el SDK para ver si tenía 21 o más. Luego inflo el diseño correspondiente. Esto obliga al botón de hardware a mapearse en la barra de herramientas que realmente diseñó.
fuente
Para cualquiera que use el nuevo
Toolbar
:fuente