Estoy usando la nueva biblioteca appcompat v7 disponible a partir de Android 4.3 (nivel de API 18).
Independientemente de lo que se especifique en showAsAction para un elemento de menú, no se muestra; siempre crea el icono 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 hay algún problema con el código? He estado usando el código similar con ActionBarSherlock muchas veces antes.
"always"
no se recomienda; es mejor usarlo"ifRoom"
y dejar que el sistema operativo decida".Respuestas:
Probablemente le falte el espacio de nombres 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 comprobar:
ActionBarActivity
Compruebe si el problema persiste.
Documentación de referencia de Android: Agregar botones de acción . Aquí está el texto relevante:
fuente
showAsAction
atributo no existía en Android-7, debe usar el espacio de nombres de su aplicaciónhttp://schemas.android.com/apk/res-auto
en cada ejemplo. No es uno personalizado ni uno que coincida con su aplicación. Ese es el espacio de nombres real de la documentación. Creo que todo el mundo quiere decir un prefijo personalizado , y en realidad puede ser lo que quieras. ¿Es esto cierto?Lo descubrí yo mismo. Con la biblioteca de soporte v7, showAsAction debería ir bajo un espacio de nombres personalizado como este:
fuente
También asegúrese de usar el inflador correcto en el método ActionBarActivity.onCreateOptionsMenu ().
Solución correcta:
Solución incorrecta:
fuente
Para fragmentos
Los menús con espacio de nombres personalizado evitarán que se muestre showAsAction.
El uso del prefijo "android:" para showAsAction funcionará, aunque Android Studio comentará que debes usar un espacio de nombre personalizado.
Esto está utilizando fragmentos de Android SDK 22 y Support v4, en caso de que eso haga alguna diferencia.
fuente
tools:ignore
.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:
fuente
setShowAsActionFlags()
requiere API 14, pero esta fue la mejor solución para mí.También asegúrese de tener la ruta correcta para el espacio de nombres. No le dará un mensaje de error si es incorrecto.
yo tenía
en vez de
Todo lo que sabía era que no estaba funcionando. No estoy seguro de cómo logré olvidar la parte / apk de la ruta, pero sucedió. Sin mensaje de error, solo un error difícil de localizar.
fuente
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 unnesessary.
Después de este reemplazo, puede escribir android: showAsAction = "always"
fuente
Puede que este no sea tu caso, pero estaba usando
new MenuInflater(this).inflate(R.menu.my_menu, menu);
cambiándolo a
getMenuInflater().inflate(R.menu.my_menu, menu);
solucionó el problema!
fuente
no funciona, con supportLibraryVersion = '25 .1.0 'compileSdkVersion = 25
ver la "Advertencia"
Debería usar app: showAsAction con la biblioteca appcompat con xmlns: app = "http://schemas.android.com/apk/res-auto" menos ... (Ctrl + F1)
Al usar la biblioteca appcompat, los recursos del menú deben hacer referencia a showAsAction en el espacio de nombres app:, no al espacio de nombres android:.
Del mismo modo, cuando no utilice la biblioteca appcompat, debería utilizar el atributo android: showAsAction.
Creo que la advertencia se puede ignorar.
fuente
agregue un espacio de nombres personalizado como este para showAsAction y actionViewClass:
fuente
Lo he resuelto reemplazando
con
Ese es el aspecto de menuitme xml,
fuente
La forma más sencilla es modificar su código agregando
y cambia este código
a
y finalmente
fuente