J'utilise la nouvelle bibliothèque appcompat v7 disponible à partir d'Android 4.3 (niveau d'API 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 sous le menu.
Essayer d'ajouter 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:
<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 bogue de la nouvelle bibliothèque de support v7, ou simplement un problème avec le code? J'ai utilisé le code similaire avec ActionBarSherlock plusieurs fois auparavant.
"always"
n'est pas recommandé; il est préférable d'utiliser"ifRoom"
et de laisser le système d'exploitation décider."Réponses:
Il vous manque probablement l'espace de noms requis:
Remplacez-le
[yourapp]
par le nom de votre application ou tout autre 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: Ajout de boutons d'action . Voici le texte pertinent:
la source
showAsAction
attribut n'existait pas dans Android-7, vous devez utiliser l'espace de noms de votre applicationhttp://schemas.android.com/apk/res-auto
dans chaque exemple. Ce n'est pas personnalisé ou correspondant à votre application. C'est l'espace de noms réel de la documentation. Je pense que tout le monde veut dire un préfixe personnalisé , et il peut en fait être ce que vous voulez. Est-ce vrai?J'ai compris. Avec la bibliothèque de support v7, showAsAction devrait passer sous un espace de noms personnalisé comme celui-ci:
la source
Assurez-vous également que vous utilisez le gonfleur correct dans la méthode ActionBarActivity.onCreateOptionsMenu ().
Solution correcte:
Solution incorrecte:
la source
Pour les fragments
Les menus avec un espace de nom personnalisé empêcheront showAsAction de s'afficher.
L'utilisation du préfixe "android:" pour showAsAction fonctionnera, même si Android Studio vous remarquera devez utiliser un espace de nom personnalisé.
Cela utilise les fragments Android SDK 22 et Support v4, au cas où cela ferait une différence.
la source
tools:ignore
.J'ai eu le même problème, mais sur Android 5. J'ai 3 éléments mais le système d'exploitation a ignoré mon attribut "toujours" et n'a montré que 2 éléments. Voici ma solution:
la source
setShowAsActionFlags()
nécessite l'API 14, mais c'était toujours la meilleure solution pour moi.Assurez-vous également que vous disposez du chemin d'accès correct pour l'espace de noms. Il ne vous donnera pas de message d'erreur si c'est faux.
j'ai eu
au lieu de
Tout ce que je savais, c'est que cela ne fonctionnait pas. Je ne sais pas comment j'ai réussi à oublier la partie / apk du chemin, mais c'est arrivé. Aucun message d'erreur, juste un bug insaisissable à traquer.
la source
Dans mon cas, j'ai dû supprimer de la compilation build.gradle de mon application 'com.android.support:appcompat-v7:21.0.3'.
Remarquer : Mon sdk min = 14 et le projet créé par Android Studio ont inséré ma dépendance inutile.
Après ce remplacement, vous pouvez écrire android: showAsAction = "always"
la source
Ce n'est peut-être pas votre cas mais j'utilisais
new MenuInflater(this).inflate(R.menu.my_menu, menu);
le changer en
getMenuInflater().inflate(R.menu.my_menu, menu);
résolu le problème!
la source
ne fonctionne pas, avec supportLibraryVersion = '25 .1.0 'compileSdkVersion = 25
voir le "Avertissement"
Doit utiliser app: showAsAction avec la bibliothèque appcompat avec xmlns: app = "http://schemas.android.com/apk/res-auto" less ... (Ctrl + F1)
Lorsque vous utilisez la bibliothèque appcompat, les ressources du menu doivent faire référence à showAsAction dans l'espace de noms app:, et non à l'espace de noms android:.
De même, lorsque vous n'utilisez pas la bibliothèque appcompat, vous devez utiliser l'attribut android: showAsAction.
Je pense que l'avertissement peut être ignoré.
la source
ajoutez un espace de noms personnalisé comme celui-ci à showAsAction et actionViewClass:
la source
Je l'ai résolu en remplaçant
avec
Cela ressemble à menuitme xml,
la source
Le moyen le plus simple est de modifier votre code en ajoutant
et changez ce code
à
et enfin
la source