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