Artículo con la aplicación: showAsAction no se muestra

No puedo entender por qué es incorrecto e incompatible (AndroidStudio me dice “Debería usar la aplicación: showAsAction con la biblioteca de appcompat”) código

   

funciona perfecto, pero la versión adecuada y compatible como

    

no mostrar mi ícono en absoluto.

Estoy probando en Samsung GT P5210 (Android v. 4.4.2) y Nexus 7 (4.4.4)

Las cosas que siempre debes verificar cuando quieras usar la barra de acciones son

1) Extienda ActionBarActivity lugar de Activity

public class MainMenu extends ActionBarActivity{

2) Tener el estilo correcto seleccionado como se define en manifiesto

Manifiesto

  

Estilo

   

3) Seleccione el título correcto para showAsAction

    ...  

Esto es lo que la mayoría de la gente se equivoca

4) Define tu Menu en la Activity

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); } 

Si haces todo lo siguiente, tu barra de acciones debería funcionar.

Luego deberías agregar onClickListener para cada posición …

Acabo de volver a leer su pregunta y vi que su problema es todo lo contrario (pero algunas partes de mi respuesta anterior todavía se aplican a su problema), así que aquí está la respuesta actualizada:

Actualizar:

¿Ha importado la biblioteca appcompat en su archivo gradle, pero parece que solo admite dispositivos más nuevos que API Level 11 o 14? Si este es el caso, la verificación de pelusas indica que ha importado la biblioteca de compatibilidad de aplicaciones a través de gradle y cree que debe usar ActionBarActivity debido a la importación de su biblioteca. Es por eso que está obteniendo el error. Pero como su atributo android:showAsAction está funcionando, está utilizando la Activity nativa y la llamada de atributo nativa es correcta, incluso si la verificación de pelusa indica que es incorrecta. Por lo tanto, si desea eliminar el error de pelusa, debe eliminar la aplicación correspondiente de su archivo Gradle y quizás cambiar su tema de actividad al tema nativo de Holo Light, ya que su tema actual podría depender del tema de la aplicación.

La respuesta por la que no funciona con el espacio de nombres de la app es cargar el atributo XML para el código de la biblioteca nativa, que se maneja en la respuesta anterior.

Vieja respuesta

Si está utilizando ActionBarActivity desde la biblioteca de soporte para llegar a dispositivos inferiores al nivel API 11, el problema principal es que ActionBarActivity recrea algunos de los atributos nativos de Android XML como android:showAsAction en su propio ámbito, que usted define con :

 xmlns:app="http://schemas.android.com/apk/res-auto" 

y luego acceda a ellos con el mismo atributo (aquí showAsAction ) en la app: namespace. Por lo tanto, ActionBarActivity no puede ver ni alcanzar el atributo android:showAsAction nativo android:showAsAction ya que solo lo busca en el espacio de nombres de la app y no en el espacio de nombres de android .

Si desea usar el atributo nativo, debe usar la Activity nativa con un Tema Holo, que solo es compatible con el Nivel 11 de API y superior.

Agrega esto:

 yourapp:showAsAction="ifRoom" 

o

 android:showAsAction 

por ejemplo:

    

y en la actividad:

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_compose: composeMessage(); return true; default: return super.onOptionsItemSelected(item); } } 

Y lee más aquí