studio menus ejemplos desplegable contextual context bar android android-menu

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



popup menu android (3)

No entiendo por qué es incorrecto e incompatible (AndroidStudio me dice "Debería usar la aplicación: showAsAction con la biblioteca de appcompat)

<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/search" android:showAsAction="always" /> </menu>

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

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/search" app:showAsAction="always" /> </menu>

No muestra mi icono en absoluto.

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


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

Actualizar:

¿Ha importado la biblioteca appcompat en su archivo de gradle, pero parece que solo admite dispositivos más nuevos que el nivel API 11 o 14? Si este es el caso, el control de pelusa ve que ha importado la biblioteca appcompat a través de gradle y cree que debe usar ActionBarActivity debido a la importación de su biblioteca. Es por eso que está recibiendo el error. Pero como su atributo android:showAsAction está funcionando, está utilizando la Activity nativa y la llamada del atributo nativo es correcta, incluso si la verificación de pelusa dice que está mal. Entonces, si desea eliminar el error de pelusa, debe eliminar la aplicación appcompat lib de su archivo de gradle y tal vez cambiar su tema de actividad al tema nativo de Holo Light, ya que su tema actual puede depender del tema de appcompat.

La respuesta por la que no funciona con el espacio de nombres de la app encuentra en la carga del atributo XML para el código de biblioteca nativo respectivamente, que se maneja en la respuesta anterior.

Respuesta antigua

Si está utilizando ActionBarActivity de la biblioteca de soporte para alcanzar dispositivos con un nivel de API 11 inferior, el problema principal aquí es que ActionBarActivity recrea algunos de los atributos XML nativos de Android, 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: espacio de nombres. Por lo tanto, ActionBarActivity no puede ver ni alcanzar el atributo nativo de android:showAsAction ya que solo lo está buscando en el espacio de nombres de la app y no en el espacio de nombres de android .

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


Las cosas que siempre debes comprobar cuando quieres usar la barra de acción son

1) Extender ActionBarActivity lugar de Activity

public class MainMenu extends ActionBarActivity{

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

Manifiesto

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >

Estilo

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> </style>

3) Seleccione el título correcto para showAsAction

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:**yourapp**="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" **yourapp**:showAsAction="ifRoom" /> ... </menu>

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

4) Defina su Menu en 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 acción debería funcionar.

Entonces debes agregar el onClickListener para cada posición ...


Agrega esto:

yourapp:showAsAction="ifRoom"

o

android:showAsAction

por ejemplo:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" yourapp:showAsAction="ifRoom" /> </menu>

y en 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 leer mas here