Sdílet prostřednictvím


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:

Příklad aplikace s tlačítkem a místní nabídkou 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 ();
};