web-dev-qa-db-fra.com

android.support.v7 avec `ActionBarActivity` pas de menu montre

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?

40
nrofis

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 .

104
CommonsWare

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.

0
Maksim Dmitriev