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 beispielsweise der Code für das Menü mit drei Elementen, das im vorherigen Screenshot Ressourcen/Menü/popup_menu.xmlangezeigt wird:

<?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 instance von, PopupMenu und verankern Sie sie in der Ansicht. Wenn Sie eine instance von PopupMenuerstellen, übergeben Sie dem Konstruktor einen Verweis auf den Context sowie die Ansicht, an die das Menü angefügt wird. Daher wird das Popupmenü während des Aufbaus in dieser Ansicht verankert.

Im folgenden Beispiel wird der PopupMenu im Click-Ereignishandler für die Schaltfläche (mit dem Namen showPopupMenu) erstellt. Diese Schaltfläche ist auch die Ansicht, in der die PopupMenu verankert ist, 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 aufgebläht 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 es einfach verworfen. In beiden Fällen wird das Menü beim Schließen des Menüs ausgelöst. Mit dem folgenden Code werden Ereignishandler für die MenuItemClick Ereignisse und DismissEvent hinzugefügt:

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