Elemento de menú Android 4.3 showAsAction = “siempre” ignorado

Estoy utilizando la nueva biblioteca v7 appcompat disponible a partir de Android 4.3 (API nivel 18).

Independientemente de lo que se especifique en showAsAction para un elemento de menú, no se muestra; siempre crea el ícono de menú de desbordamiento y coloca incluso un solo elemento de menú debajo del menú.

Intentando agregar menú a una actividad como esta:

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_sizes, menu); return true; } 

Y aquí está mi menú xml:

    

¿Es un error de la nueva biblioteca de soporte v7, o simplemente algo está mal con el código? He estado usando el código similar con ActionBarSherlock muchas veces antes.

Probablemente te falta el espacio de nombre requerido:

    

Reemplace [yourapp] con el nombre de su aplicación o cualquier espacio de nombres que su corazón desee en todas partes.

Otras cosas que vale la pena consultar:

  • Vea si su clase de actividad extiende ActionBarActivity

Compruebe si el problema persiste.


Documentación de referencia de Android: Agregar botones de acción . Aquí está el texto relevante:

Si su aplicación usa la Biblioteca de soporte para compatibilidad en versiones tan bajas como Android 2.1, el atributo showAsAction no está disponible en el espacio de nombres de android. En cambio, este atributo lo proporciona la Biblioteca de soporte y debe definir su propio espacio de nombres XML y usar ese espacio de nombres como el prefijo del atributo. (Un espacio de nombres XML personalizado debe basarse en el nombre de su aplicación, pero puede ser cualquier nombre que desee y solo se puede acceder dentro del scope del archivo en el que lo declara).

Me imaginé a mí mismo. Con la biblioteca de soporte v7 el showAsAction debe ir debajo de un espacio de nombres personalizado como este:

    

También asegúrese de utilizar el inflador correcto en el método ActionBarActivity.onCreateOptionsMenu ().

Solución correcta:

 MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu_example, menu); 

Solución incorrecta:

 MenuInflater menuInflater = new MenuInflater(this); menuInflater.inflate(R.menu.menu_example, menu); 

Para fragmentos

Los menús con espacio de nombres personalizado evitarán que se muestre showAsAction.

Usar el prefijo “android:” para showAsAction funcionará, aunque Android Studio comentará que debes usar un espacio de nombre personalizado.

    

Esto está usando Android SDK 22 y fragmentos de Support v4, en caso de que haya alguna diferencia.

Tengo el mismo problema, pero en Android 5. Tengo 3 elementos, pero el sistema operativo ignoró mi atributo “siempre” y mostró solo 2 elementos. Aquí mi solución:

  @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { Log.d(TAG, "onCreateOptionsMenu()"); inflater.inflate(R.menu.your_menu, menu); for (int j = 0; j < menu.size(); j++) { MenuItem item = menu.getItem(j); Log.d(TAG, "set flag for " + item.getTitle()); item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS); } } 

En mi caso, tuve que eliminar de la comstackción build.gradle de mi aplicación ‘com.android.support:appcompat-v7:21.0.3’.

Aviso : Mi min sdk = 14, y el proyecto creado por android studio insertó mi dependencia innecesaria.

Después de este reemplazo puedes escribir android: showAsAction = “always”

También asegúrese de tener la ruta correcta para el espacio de nombres. No le dará un mensaje de error si está mal.

tuve

  

en lugar de

  

Todo lo que sabía era que no estaba funcionando. No estoy seguro de cómo pude olvidar la parte / apk del camino, pero sucedió. No hay mensaje de error, solo un error difícil de localizar.

Este podría no ser tu caso pero estaba usando

new MenuInflater(this).inflate(R.menu.my_menu, menu);

cambiándolo a

getMenuInflater().inflate(R.menu.my_menu, menu);

arregló el problema!

Tenía el mismo problema.

tuve

   

en lugar de

    
      

no funciona, con supportLibraryVersion = ’25 .1.0 ‘compileSdkVersion = 25

ver la “Advertencia”

Debería usar la aplicación: showAsAction con la biblioteca appcompat con xmlns: app = “http://schemas.android.com/apk/res-auto” menos … (Ctrl + F1)

Al utilizar la biblioteca appcompat, los recursos del menú deben hacer referencia a showAsAction en la aplicación: namespace, no android: namespace.

Del mismo modo, cuando no se utiliza la biblioteca appcompat, debe utilizar el atributo android: showAsAction.

Creo que la advertencia puede ser ignorada.

agregue un espacio de nombres personalizado como este para mostrarAsAction y actionViewClass:

   

La forma más simple es: