Xamarin.Android 弹出菜单

弹出菜单(也称为快捷菜单)是一种定位到特定视图的菜单。 在以下示例中,单个活动包含一个按钮。 当用户点击该按钮时,将显示一个三项弹出菜单:

Example of an app with a button and three-item pop-up menu

创建弹出菜单

首先是为菜单创建一个菜单资源文件,并将其放置在 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。 以下代码为 MenuItemClickDismissEvent 事件添加事件处理程序:

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 ();
};