116 votes

Android 4,3 menu élément showAsAction = « always » ignoré

Je suis l'aide de la nouvelle v7 appcompat bibliothèque disponible à partir de Android 4.3 (API level 18).

Indépendamment de ce qui est spécifié dans showAsAction pour un élément de menu, il n'est pas montré, il crée toujours le menu contextuel de l'icône, et met même un seul élément de menu sous le menu.

En essayant d'ajouter un menu pour une activité de ce genre:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_sizes, menu);
    return true;
}

Et voici mon menu 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>

Est-ce un bug de la nouvelle bibliothèque de prise en charge v7, ou tout simplement quelque chose de mal avec le code? J'ai été en utilisant le même code avec ActionBarSherlock de nombreuses fois avant.

314voto

Nikola Despotoski Points 13670

Probablement vous êtes en manque d'espace de noms:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:[yourapp]="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/menu_add_size"
        android:title="@string/menu_add_item"
        android:orderInCategory="10"
        [yourapp]:showAsAction="always"
        android:icon="@android:drawable/ic_menu_add" />
</menu>

Remplacer [yourapp] avec votre nom de l'application ou de tout espace de votre cœur désire partout.

D'autres choses qui valent le détour:

  • Voir si votre classe d'activité s'étend ActionBarActivity

Vérifiez si le problème persiste.


Android documentation de référence: Ajout de Boutons d'Action. Voici le texte:

Si votre application utilise la Bibliothèque de prise en charge pour la compatibilité avec des versions aussi bas que Android 2.1, le showAsAction attribut n'est pas disponible à partir de l'android: espace de noms. Au contraire, cet attribut est fourni par la Bibliothèque de prise en charge et vous devez définir votre propre espace de noms XML et l'utilisation de l'espace de nom que l'attribut préfixe. (Une coutume d'espace de noms XML doit être basée sur votre nom de l'application, mais il peut être n'importe quel nom que vous voulez et n'est accessible que dans le champ d'application du fichier dans lequel vous déclarez.)

52voto

Mcingwe Points 397

Ai réalisé moi-même. Avec le soutien bibliothèque v7 la showAsAction devrait aller dans un espace de noms personnalisé comme ceci :

35voto

petrnohejl Points 2483

Assurez-vous également que vous utilisez gonflage correct dans la méthode ActionBarActivity.onCreateOptionsMenu().

Solution correcte :

Solution incorrecte :

6voto

BeccaP Points 214

Assurez-vous également que vous avez le chemin d’accès correct pour l’espace de noms. Il ne vous donnera un message d’erreur si elle ne va pas.

J’ai eu

Au lieu de

Tout je savais que c’était qu’il ne fonctionnait pas. Ne sais pas comment j’ai réussi à oublier la partie /apk de la voie, mais il s’est passé. Aucun message d’erreur, juste un bug insaisissable pour traquer.

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