Partager via


Menu contextuel Xamarin.Android

PopupMenu (également appelé menu contextuel) est un menu ancré à une vue particulière. Dans l’exemple suivant, une activité unique contient un bouton. Lorsque l’utilisateur appuie sur le bouton, un menu contextuel à trois éléments s’affiche :

Exemple d’application avec un bouton et un menu contextuel à trois éléments

Création d’un menu contextuel

La première étape consiste à créer un fichier de ressources de menu pour le menu et à le placer dans Ressources/menu. Par exemple, le code XML suivant est le code du menu trois éléments affiché dans la capture d’écran précédente, Ressources/menu/popup_menu.xml :

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item1"
          android:title="item 1" />
    <item android:id="@+id/item1"
          android:title="item 2" />
    <item android:id="@+id/item1"
          android:title="item 3" />
</menu>

Ensuite, créez une instance de PopupMenu et ancrez-la dans sa vue. Lorsque vous créez une instance de PopupMenu, vous transmettez à son constructeur une référence à l’affichage Context auquel le menu sera attaché. Par conséquent, le menu contextuel est ancré à cette vue pendant sa construction.

Dans l’exemple suivant, le PopupMenu fichier est créé dans le gestionnaire d’événements Click pour le bouton (nommé showPopupMenu). Ce bouton est également l’affichage auquel il PopupMenu est ancré, comme illustré dans l’exemple de code suivant :

showPopupMenu.Click += (s, arg) => {
    PopupMenu menu = new PopupMenu (this, showPopupMenu);
};

Enfin, le menu contextuel doit être gonflé avec la ressource de menu créée précédemment. Dans l’exemple suivant, l’appel à la méthode Deflation du menu est ajouté et sa méthode Show est appelée pour l’afficher :

showPopupMenu.Click += (s, arg) => {
    PopupMenu menu = new PopupMenu (this, showPopupMenu);
    menu.Inflate (Resource.Menu.popup_menu);
    menu.Show ();
};

Gestion des événements de menu

Lorsque l’utilisateur sélectionne un élément de menu, l’événement MenuItemClick click est déclenché et le menu est ignoré. En appuyant n’importe où en dehors du menu, il vous suffit de l’ignorer. Dans les deux cas, lorsque le menu est ignoré, son DismissEvent est déclenché. Le code suivant ajoute des gestionnaires d’événements pour les événements et DismissEvent les MenuItemClick événements :

showPopupMenu.Click += (s, arg) => {
    PopupMenu menu = new PopupMenu (this, showPopupMenu);
    menu.Inflate (Resource.Menu.popup_menu);

    menu.MenuItemClick += (s1, arg1) => {
        Console.WriteLine ("{0} selected", arg1.Item.TitleFormatted);
    };

    menu.DismissEvent += (s2, arg2) => {
        Console.WriteLine ("menu dismissed");
    };
    menu.Show ();
};