Místní nabídka Xamarin.Android
Místní nabídka (označovaná také jako místní nabídka) je nabídka, která je ukotvená k určitému zobrazení. V následujícím příkladu obsahuje jedna aktivita tlačítko. Když uživatel klepne na tlačítko, zobrazí se místní nabídka se třemi položkami:
Vytvoření místní nabídky
Prvním krokem je vytvoření souboru prostředku nabídky pro nabídku a jeho umístění do nabídky Prostředky nebo nabídka. Například následující kód XML je kód nabídky se třemi položkami zobrazený na předchozím snímku obrazovky, Resources/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>
Dále vytvořte instanci PopupMenu
a zakotvíte ji do zobrazení. Při vytváření instance PopupMenu
, předáváte jeho konstruktor odkaz na Context
a také zobrazení, ke kterému bude nabídka připojena. V důsledku toho je místní nabídka ukotvená k tomuto zobrazení během jeho výstavby.
V následujícím příkladu PopupMenu
je vytvořen v obslužné rutině události click pro tlačítko (který je pojmenován showPopupMenu
). Toto tlačítko je také zobrazení, ke kterému PopupMenu
je ukotveno, jak je znázorněno v následujícím příkladu kódu:
showPopupMenu.Click += (s, arg) => {
PopupMenu menu = new PopupMenu (this, showPopupMenu);
};
Nakonec se místní nabídka musí nafouknout prostředkem nabídky, který byl vytvořen dříve. V následujícím příkladu je přidáno volání metody Inflate menu a jeho Show metoda je volána k zobrazení:
showPopupMenu.Click += (s, arg) => {
PopupMenu menu = new PopupMenu (this, showPopupMenu);
menu.Inflate (Resource.Menu.popup_menu);
menu.Show ();
};
Zpracování událostí nabídky
Když uživatel vybere položku nabídky, vyvolá se událost click MenuItemClick a nabídka se zavře. Klepnutím na libovolné místo mimo nabídku ji jednoduše zavřete. V obou případech bude při zavření nabídky vyvolána možnost ZavřítEvent . Následující kód přidá obslužné rutiny událostí pro MenuItemClick
události i DismissEvent
události:
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 ();
};