Condividi tramite


Menu a comparsa Xamarin.Android

PopupMenu (detto anche menu di scelta rapida) è un menu ancorato a una visualizzazione specifica. Nell'esempio seguente una singola attività contiene un pulsante. Quando l'utente tocca il pulsante, viene visualizzato un menu popup a tre voci:

Esempio di un'app con un pulsante e un menu a comparsa a tre elementi

Creazione di un menu popup

Il primo passaggio consiste nel creare un file di risorse di menu per il menu e inserirlo in Risorse/menu. Ad esempio, il codice XML seguente è il codice per il menu a tre voci visualizzato nello screenshot precedente, Risorse/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>

Creare quindi un'istanza di PopupMenu e ancorarla alla visualizzazione. Quando si crea un'istanza di PopupMenu, si passa al relativo costruttore un riferimento all'oggetto Context e alla visualizzazione a cui verrà associato il menu. Di conseguenza, il menu popup viene ancorato a questa visualizzazione durante la sua costruzione.

Nell'esempio seguente l'oggetto PopupMenu viene creato nel gestore eventi click per il pulsante ( denominato showPopupMenu). Questo pulsante è anche la visualizzazione a cui è ancorato , PopupMenu come illustrato nell'esempio di codice seguente:

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

Infine, il menu popup deve essere gonfiato con la risorsa di menu creata in precedenza. Nell'esempio seguente viene aggiunta la chiamata al metodo Inflate del menu e viene chiamato il relativo metodo Show per visualizzarlo:

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

Gestione degli eventi del menu

Quando l'utente seleziona una voce di menu, verrà generato l'evento Click MenuItemClick e il menu verrà ignorato. Toccando un punto qualsiasi all'esterno del menu verrà semplicemente ignorato. In entrambi i casi, quando il menu viene ignorato, verrà generato l'evento DismissEvent . Il codice seguente aggiunge gestori eventi per gli MenuItemClick eventi e DismissEvent :

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 ();
};