Est-il possible d'afficher les icônes dans un PopupMenu?
J'ai vraiment comme la nouvelle PopupMenu nous avons obtenu dans la version 3.0, mais je ne peux pas afficher les icônes à côté du menu objets. Je suis en gonflant le menu de la .xml ci-dessous:
<item android:id="@+id/menu_delete_product"
android:icon="@drawable/sym_action_add"
android:title="delete"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_modify_product"
android:icon="@drawable/sym_action_add"
android:title="modify"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_product_details"
android:icon="@drawable/sym_action_add"
android:title="details"
android:showAsAction="ifRoom|withText" />
Avec ce code:
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu pop = new PopupMenu(getActivity(), v);
pop.getMenuInflater().inflate(R.menu.shelves_details_menu, pop.getMenu());
pop.show();
}
});
Je ne peux pas récupérer les icônes à afficher, suis-je raté quelque chose?
- Il est intéressant de noter la bonne réponse (2014) est tout simplement: PopupMenu NE comprend PAS/AFFICHER les ICÔNES. C'est aussi simple que cela. Il ya un certain nombre de solutions de contournement, en impliquant PAS l'utilisation d'un PopupMenu, mais en utilisant quelque chose d'autre. OU une bonne solution est d'étendre PopupMenu, comme @Robert explique ci-dessous.
- si tout le monde bâtons de réponses "simple" stackoverflow serait très ennuyeux. laissez libre cours à votre imagination s'il vous plaît.
Vous devez vous connecter pour publier un commentaire.
Si vous êtes prêt à être un peu aventureux, regardez Google code source pour PopupMenu. Créez votre propre classe c'est à dire MyPopupMenu qui est le même que Google classe PopupMenu, mais faire un léger changement.
Dans PopupMenu constructeur:
utiliser la méthode setForceShowIcon pour le forcer à afficher l'icône. Vous pouvez aussi exposer une méthode publique pour définir cet indicateur, en fonction de vos besoins.
Contribution à la solution fournie par Gaelan Bolger.
Utiliser ce code si vous obtenez un "IllegalAccessException: l'accès à un champ non autorisé".
texte
PopupMenu
. Grand. (Sera brisé sur android d'un changement de source, non?)J'ai été en mesure de montrer les icônes à l'aide de la réflexion. Il peut ne pas être la solution la plus élégante, mais il fonctionne.
On peut utiliser le sous-menu modèle. Donc, nous n'avons pas besoin d'écrire la méthode pour montrer le menu contextuel, il sera montrant automacally. Regardez:
menu.xml
dans MainActivity.java
Le résultat est:
avant d'utiliser la méthode contextuelle.show(),faire un MenuPopupHelper instance et d'appel de la méthode setForceShowIcon(vrai),à l'instar de ce
La façon la plus simple que j'ai trouvé est que pour utiliser
MenuBuilder
etMenuPopupHelper
.menu.xml
J'ai trouvé une solution native pour cela, à l'aide de
MenuPopupHelper.setForceShowIcon(true)
.Utilisation
PopupMenu ne sera pas afficher les icônes. Vous pouvez utiliser une ActionBar.
http://developer.android.com/guide/topics/ui/actionbar.html
Certaines des solutions ci-dessus va travailler avec la réflexion hack,
Partage juste ceci: j'ai récemment tombé sur les mêmes questions, mais j'ai aussi voulu créer une personnalisée de la chose (l'ajout d'affichage personnalisé dans le menu) j'ai donc créé le suivant: lib.
https://github.com/shehabic/Droppy
Le long de la ligne de l'utilisation de la réflexion et sans la nécessité d'utiliser
MenuPopupHelper
, vous pouvez ajouteravant de gonfler le menu