J’utilise la nouvelle bibliothèque appcompat v7 disponible à partir d’Android 4.3 (API niveau 18).
Indépendamment de ce qui est spécifié dans showAsAction pour un élément de menu, il n’est pas affiché – il crée toujours l’icône de menu de débordement et place même un seul élément de menu dans le menu.
Essayer d’append un menu à une activité comme celle-ci:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_sizes, menu); return true; }
Et voici mon menu xml:
Est-ce un bogue de la nouvelle bibliothèque de support v7, ou quelque chose qui ne va pas avec le code? J’ai utilisé le code similaire avec ActionBarSherlock plusieurs fois auparavant.
Vous manquez probablement d’espace de noms requirejs:
Remplacez [yourapp]
par le nom de votre application ou par n’importe quel espace de noms que votre cœur désire partout.
Autres choses à vérifier:
ActionBarActivity
Vérifiez si le problème persiste.
Documentation de référence Android: Ajouter des boutons d’action . Voici le texte pertinent:
Si votre application utilise la bibliothèque de support pour la compatibilité sur des versions aussi faibles qu’Android 2.1, l’atsortingbut showAsAction n’est pas disponible à partir de l’espace de noms android:. Au lieu de cela, cet atsortingbut est fourni par la bibliothèque de support et vous devez définir votre propre espace de noms XML et utiliser cet espace de noms comme préfixe d’atsortingbut. (Un espace de noms XML personnalisé doit être basé sur le nom de votre application, mais il peut s’agir de n’importe quel nom et n’est accessible que dans la scope du fichier dans lequel vous le déclarez.)
J’ai trouvé moi-même. Avec la bibliothèque de support v7, showAsAction devrait être placé dans un espace de noms personnalisé comme ceci:
Veillez également à utiliser inflater correctement dans la méthode ActionBarActivity.onCreateOptionsMenu ().
Solution correcte:
MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu_example, menu);
Solution incorrecte:
MenuInflater menuInflater = new MenuInflater(this); menuInflater.inflate(R.menu.menu_example, menu);
Pour les fragments
Les menus avec un espace de noms personnalisé empêchent showAsAction de s’afficher.
L’utilisation du préfixe “android:” pour showAsAction fonctionnera, même si Android Studio remarquera que vous devez utiliser un espace de nom personnalisé.
Cela utilise Android SDK 22 et Support v4 fragments, au cas où cela fait une différence.
J’ai le même problème, mais sur Android 5. J’ai 3 éléments mais OS a ignoré mon atsortingbut “toujours” et n’a montré que 2 éléments. Voici ma solution:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { Log.d(TAG, "onCreateOptionsMenu()"); inflater.inflate(R.menu.your_menu, menu); for (int j = 0; j < menu.size(); j++) { MenuItem item = menu.getItem(j); Log.d(TAG, "set flag for " + item.getTitle()); item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS); } }
Dans mon cas, j’ai dû supprimer de la compilation build.gradle ‘com.android.support:appcompat-v7:21.0.3’ de mon application.
Remarque : Mon min sdk = 14, et projet créé par Android Studio a inséré ma dépendance sans nécessité.
Après ce remplacement, vous pouvez écrire Android: showAsAction = “toujours”
Assurez-vous également que vous disposez du chemin correct pour l’espace de noms. Cela ne vous donnera pas un message d’erreur si c’est faux.
j’avais
au lieu de
Tout ce que je savais, c’était que ça ne fonctionnait pas. Je ne sais pas comment j’ai réussi à oublier la partie / apk du chemin, mais c’est arrivé. Pas de message d’erreur, juste un bug insaisissable pour retrouver.
Cela pourrait ne pas être votre cas mais j’utilisais
new MenuInflater(this).inflate(R.menu.my_menu, menu);
le changer pour
getMenuInflater().inflate(R.menu.my_menu, menu);
résolu le problème!
Eu le même problème.
j’avais
au lieu de
ne fonctionne pas, avec supportLibraryVersion = ’25 .1.0 ‘comstackSdkVersion = 25
voir le “Avertissement”
Devrait utiliser app: showAsAction avec la bibliothèque appcompat avec xmlns: app = “http://schemas.android.com/apk/res-auto” less … (Ctrl + F1)
Lors de l’utilisation de la bibliothèque appcompat, les ressources de menu doivent faire référence à showAsAction dans l’application: namespace, pas à l’espace de noms android:.
De même, lorsque vous n’utilisez pas la bibliothèque appcompat, vous devez utiliser l’atsortingbut android: showAsAction.
Je pense que l’avertissement peut être ignoré.
ajoutez un espace de noms personnalisé comme celui-ci à showAsAction et à actionViewClass:
Le moyen le plus simple est: