full - Elemento de menú Android 4.3 showAsAction="siempre" ignorado
show action bar android (11)
En mi caso, tuve que eliminar de la compilació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"
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:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</menu>
¿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.
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!
Me imaginé a mí mismo. Con la biblioteca de soporte v7 el showAsAction debe ir debajo de un espacio de nombres personalizado como este:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:balloonberry="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
balloonberry:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</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.
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_add_checkin"
android:title="Add Checkin"
android:orderInCategory="10"
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_add"/>
</menu>
Esto está usando Android SDK 22 y fragmentos de Support v4, en caso de que haya alguna diferencia.
Probablemente te falta el espacio de nombre requerido:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:[yourapp]="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
[yourapp]:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</menu>
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 alcance del archivo en el que lo declara).
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
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/res-auto">
en lugar de
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto">
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.
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);
Tenía el mismo problema.
tuve
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/searchRunner"
android:icon="@drawable/ic_home_black"
android:title="Search"
android="ifRoom"/></menu>
en lugar de
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/item1"
android:title="Options"/>
<item
android:id="@+id/searchRunner"
android:icon="@drawable/ic_home_black"
android:title="Search"
app:showAsAction="ifRoom"/></menu>
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);
}
}
agregue un espacio de nombres personalizado como este para mostrarAsAction y actionViewClass:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
android:title="@string/search"
android:icon="@drawable/ic_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView" />
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item
android:id="@id/back"
android:icon="@drawable/back"
app:showAsAction="always"
android:title="@string/back"/>
<item
android:id="@id/save"
android:icon="@drawable/le_top_btn_icon_add"
app:showAsAction="ifRoom"
android:title="@string/save"/>
</menu>
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.