Freigeben über


Xamarin.Android-Popupmenü

Das PopupMenü (auch als Kontextmenü bezeichnet) ist ein Menü, das in einer bestimmten Ansicht verankert ist. Im folgenden Beispiel enthält eine einzelne Aktivität eine Schaltfläche. Wenn der Benutzer auf die Schaltfläche tippt, wird ein Popupmenü mit drei Elementen angezeigt:

Beispiel für eine App mit einer Schaltfläche und einem Popupmenü mit drei Elementen

Erstellen eines Popupmenüs

Der erste Schritt besteht darin, eine Menüressourcendatei für das Menü zu erstellen und sie in "Ressourcen/Menü" zu platzieren. Der folgende XML-Code ist z. B. der Code für das Drei-Element-Menü, das im vorherigen Screenshot angezeigt wird: Ressourcen/Menü/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>

Erstellen Sie als Nächstes eine Instanz von PopupMenu und verankern Sie sie in ihrer Ansicht. Wenn Sie eine Instanz von PopupMenuerstellen, übergeben Sie dessen Konstruktor einen Verweis auf die Context Sowie die Ansicht, an die das Menü angefügt wird. Daher ist das Popupmenü während der Konstruktion an dieser Ansicht verankert.

Im folgenden Beispiel wird das PopupMenu im Click-Ereignishandler für die Schaltfläche (benannt showPopupMenu) erstellt. Diese Schaltfläche ist auch die Ansicht, mit der die PopupMenu Verankerung erfolgt, wie im folgenden Codebeispiel gezeigt:

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

Schließlich muss das Popupmenü mit der zuvor erstellten Menüressource aufgeblasen werden. Im folgenden Beispiel wird der Aufruf der Inflate-Methode des Menüs hinzugefügt, und die Show-Methode wird aufgerufen, um sie anzuzeigen:

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

Behandeln von Menüereignissen

Wenn der Benutzer ein Menüelement auswählt, wird das MenuItemClick-Klickereignis ausgelöst, und das Menü wird geschlossen. Wenn Sie auf eine beliebige Stelle außerhalb des Menüs tippen, wird sie einfach geschlossen. In beiden Fällen wird "DismissEvent" ausgelöst, wenn das Menü geschlossen wird. Der folgende Code fügt Ereignishandler sowohl für die MenuItemClick DismissEvent Ereignisse als auch für Ereignisse hinzu:

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