Всплывающее меню Xamarin.Android
PopupMenu (также называемое контекстным меню) — это меню, которое привязано к конкретному представлению. В следующем примере одно действие содержит кнопку. Когда пользователь нажимает кнопку, отображается всплывающее меню с тремя элементами:
Создание всплывающего меню
Первым шагом является создание файла ресурса меню для меню и его размещение в ресурсах или меню. Например, следующий XML-код — это код для меню с тремя элементами, отображаемым на предыдущем снимке экрана: 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>
Затем создайте экземпляр PopupMenu
и привязите его к представлению. При создании экземпляра PopupMenu
конструктор передает ссылку на Context
конструктор, а также представление, к которому будет присоединено меню. В результате всплывающее меню привязано к этому представлению во время его строительства.
В следующем примере PopupMenu
создается в обработчике событий нажатия кнопки (который называется showPopupMenu
). Эта кнопка также представляет собой представление, к которому PopupMenu
привязаны привязки, как показано в следующем примере кода:
showPopupMenu.Click += (s, arg) => {
PopupMenu menu = new PopupMenu (this, showPopupMenu);
};
Наконец, всплывающее меню должно быть раздуваемо с помощью ресурса меню, созданного ранее. В следующем примере добавляется вызов метода Inflate меню и вызывается его метод Show, чтобы отобразить его:
showPopupMenu.Click += (s, arg) => {
PopupMenu menu = new PopupMenu (this, showPopupMenu);
menu.Inflate (Resource.Menu.popup_menu);
menu.Show ();
};
Обработка событий меню
Когда пользователь выбирает пункт меню, событие click MenuItemClick будет поднято, и меню будет отклонено. Касание в любом месте за пределами меню просто уволит его. В любом случае при закрытии меню будет возникать его "Закрыть". Следующий код добавляет обработчики событий для MenuItemClick
событий и DismissEvent
событий:
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 ();
};