40 votes

android.support.v7 avec `ActionBarActivity` aucun menu n'apparaît

Dans la nouvelle mise à jour Google a publié une nouvelle prise en charge des API de la bibliothèque, qui prennent en charge le contrôle ActionBar de l'API de niveau 7+.

J'ai utilisé ActionBarSherlock jusqu'à ce que 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 menu fichier:

<?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 fonctionne parfaitement avec ActionBarSherlock. Mais quand j'ai changé la barre d'action pour la nouvelle bibliothèque de prise en charge, les boutons de la dose n'est pas indiqué dans la barre d'action. Même qu'il y a comme android:showAsAction="always". Et quand je déboguer le code, la fonction menu.getSize() de retour de 2, et que c'est correct, mais pas de boutons affichés..

Pourquoi les boutons de la dose n'est pas indiqué dans la nouvelle bibliothèque de prise en charge?

104voto

CommonsWare Points 402670

Essayez d'appuyer sur le bouton MENU de votre appareil ou de l'émulateur, et voir si elles apparaissent dans la zone de débordement.

S'ils le font, alors le problème est que votre <menu> XML doit changer. Menu XML qui fonctionne avec ActionBarSherlock et de l'API native de Niveau 11+ barre d'action ne fonctionnera pas avec la AppCompat barre d'action backport.

Votre menu XML devra 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 devez utiliser le même yourapp préfixe pour tout autre élément lié à la barre d'action (par exemple, yourapp:actionLayout).

Vous pouvez voir ce couvert dans la barre d'action de la documentation.

0voto

Maksim Dmitriev Points 515

J'aimerais ajouter un peu à la réponse.

Si vous souhaitez afficher à la fois du texte et une icône , veuillez utiliser withText en showAsAction Je viens de le tester; quand j'ai utilisé always ou ifRoom sans withText , je n'ai vu qu'une icône.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X