Xamarin.Android 弹出菜单
弹出菜单(也称为快捷菜单)是一种定位到特定视图的菜单。 在以下示例中,单个活动包含一个按钮。 当用户点击该按钮时,将显示一个三项弹出菜单:
创建弹出菜单
首先是为菜单创建一个菜单资源文件,并将其放置在 Resources/menu 中。 例如,下面的 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
的引用以及菜单附加到的视图。 这样,弹出菜单在构造过程中会定位到此视图。
在以下示例中,在按钮的单击事件处理程序(这称为 showPopupMenu
)中创建了 PopupMenu
。 此按钮也是 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 ();
};
处理菜单事件
当用户选择菜单项时,会引发 MenuItemClick 单击事件,并关闭菜单。 点击菜单以外的任何位置只会关闭菜单。 在任一情况下,当菜单关闭时,都会引发 DismissEvent。 以下代码为 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 ();
};