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