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:
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 PopupMenu
erstellen, ü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 ();
};