J'ai un élément de menu qui apparaît sur Android 4.x mais pas sur 2.x. Voici mon menu.xml
<?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/menu_filter"
Android:title="Filter"
app:showAsAction="always"/>
</menu>
C'est mon style d'actionbar
<style name="style1_actionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="Android:background">@color/blue_dark</item>
<item name="Android:textColor">@color/white</item>
<item name="actionMenuTextAppearance">@color/white</item>
<item name="background">@color/blue_dark</item>
</style>
Des idées?
Edit: suppression de la double citation typo
Serait-ce le fait que je ne montre que du texte, pas d'icônes? Je suis un peu coincé ici.
Whew, merci pour votre aide les gars, mais j'ai réussi à comprendre. Ce n'était pas un problème avec le XML, c'était un problème avec la fonction onCreateOptionsMenu.
J'utilisais ceci
new MenuInflater(getApplication()).inflate(R.menu.activity_wentry_editor, menu);
au lieu de cela
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_wentry_editor, menu);
Pas tout à fait sûr pourquoi cela fonctionne, mais ça marche.
<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>
Veuillez vous référer à la documentation. http://developer.Android.com/guide/topics/ui/actionbar.html
Utilisation d'attributs XML de la bibliothèque de support
Notez que l'attribut showAsAction ci-dessus utilise un espace de nom personnalisé défini dans la balise. Cela est nécessaire lorsque vous utilisez des attributs XML définis par la bibliothèque de support, car ces attributs n'existent pas dans la structure Android sur les anciens périphériques. Vous devez donc utiliser votre propre espace de noms comme préfixe pour tous les attributs définis par la bibliothèque de support.
Dans mon cas, j'ai dû ajouter quelques lignes à onCreateOptionsMenu.
Android Studio ne m'a pas laissé utiliser Android: showAsAction = "ifRoom" lors de l'utilisation d'appCompat.
app: showAsAction = "ifRoom" ne fonctionnait pas et je l'ai supprimé sans problèmes.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
return super.onCreateOptionsMenu(menu);
}
Si vous souhaitez que votre application prenne en charge la barre d'actions inférieure à 3.0, vous devez utiliser app compact v7 à partir de la bibliothèque de prise en charge.
Vérifiez également le link
En utilisant le menu dans une activité qui étend AppCompact, il est nécessaire d'importer le contexte d'application dans le XML et de l'utiliser:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<!-- "Mark Favorite", should appear as action button if possible -->
<item
Android:id="@+id/action_favorite"
Android:icon="@drawable/ic_favorite_black_48dp"
Android:title="@string/action_favorite"
app:showAsAction="ifRoom"/>
<!-- Settings, should always be in the overflow -->
<item Android:id="@+id/action_settings"
Android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
Ce que vous devez faire, en gros, c’est d’ajouter xmlns:app="http://schemas.Android.com/apk/res-auto"
à l’élément de menu de votre XML et d’utiliser le paramètre showAsAction au format suivant: app:showAsAction="ifRoom"
.
Cela affichera l'icône dans la barre d'action, si possible.