J'ai un ActionBar
avec un élément d'action dessus. Après avoir cliqué sur l'élément d'action, je souhaite afficher un menu contextuel. J'ai implémenté cette méthode, mais je veux l'ancrer à l'élément d'action ou à ActionBar
, pas à une vue de la disposition. Comment obtenir une sorte de vue pour l'ancrer à partir de MenuItem
?
public boolean onOptionsItemSelected(MenuItem item) {
PopupMenu popupMenu = new PopupMenu(this, ??????); // What view goes here?
popupMenu.inflate(R.menu.counters_overflow);
popupMenu.show();
// ...
return true;
}
J'ai finalement trouvé une solution. Lorsque vous souhaitez ancrer le menu contextuel à ActionItem dans ActionBar, vous devez trouver une vue qui rend ActionItem. Vue de recherche simple avec findViewById () où id est identique à l'id de votre élément de menu en xml.
AFFICHAGE DE LA POPUP:
public boolean onOptionsItemSelected(MenuItem item) {
// ...
View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID
PopupMenu popupMenu = new PopupMenu(this, menuItemView);
popupMenu.inflate(R.menu.counters_overflow);
// ...
popupMenu.show();
// ...
return true;
}
MENU:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >
....
<item
Android:id="@+id/menu_overflow"
Android:icon="@drawable/ic_overflow"
Android:showAsAction="ifRoom"
Android:title="@string/menu_overflow"/>
....
</menu>
Si l'élément de menu n'est pas visible (est en débordement), cela ne fonctionne pas. findViewById renvoie null, vous devez donc vérifier cette situation et ancrer à une autre vue.