Dans la nouvelle mise à jour, Google a publié une nouvelle bibliothèque de prise en charge de l'API, qui prend en charge le ActionBar dans l'API de niveau 7+.
J'ai utilisé ActionBarSherlock jusqu'à cette mise à jour et j'ai écrit le code pour charger le menu:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main, menu);
return true;
}
et le fichier de menu:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@+id/item_menu_ok" Android:icon="@drawable/ic_action_ok"
Android:title="@string/ok" Android:showAsAction="always"></item>
<item Android:id="@+id/item_menu_cancel" Android:icon="@drawable/ic_action_cancel"
Android:title="@string/cancel" Android:showAsAction="always"></item>
</menu>
Pour configurer les boutons de menu sur la barre d’action. Ce code fonctionnait parfaitement avec ActionBarSherlock. Mais lorsque j'ai remplacé la barre d'actions par la nouvelle bibliothèque de support, les boutons ne sont pas affichés dans la barre d'actions. Même s'ils sont définis en tant que Android:showAsAction="always"
. Et lorsque je débogue le code, la fonction menu.getSize()
renvoie 2, ce qui est correct, mais aucun bouton n'est affiché.
Pourquoi les boutons ne sont-ils pas affichés dans la nouvelle bibliothèque de support?
Essayez d’appuyer sur le bouton MENU de votre appareil ou de votre émulateur et voyez s’ils apparaissent dans le débordement.
Si tel est le cas, le problème est que votre code XML <menu>
doit être modifié. Le menu XML qui fonctionne avec ActionBarSherlock et la barre d'action native de l'API de niveau 11+ ne fonctionnera pas avec le backport de la barre d'action AppCompat.
Votre menu XML devrait ressembler à ceci:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:yourapp="http://schemas.Android.com/apk/res-auto"
>
<item Android:id="@+id/item_menu_ok" Android:icon="@drawable/ic_action_ok"
Android:title="@string/ok" yourapp:showAsAction="always"></item>
<item Android:id="@+id/item_menu_cancel" Android:icon="@drawable/ic_action_cancel"
Android:title="@string/cancel" yourapp:showAsAction="always"></item>
</menu>
Et vous devrez utiliser le même préfixe yourapp
pour tout ce qui concerne la barre d’action (par exemple, yourapp:actionLayout
).
Vous pouvez voir cela couvert dans la documentation de la barre d'actions .
Je voudrais ajouter un peu à la réponse.
Si vous voulez voir les deux texte et une icône, veuillez utiliser withText
dans showAsAction
Je viens de le tester; quand j'ai utilisé always
ou ifRoom
sans withText
, je ne voyais qu'une icône.