Xamarin.Android のポップアップ メニュー
PopupMenu ("ショートカット メニュー" とも呼ばれます) は、特定のビューに固定されているメニューです。 次の例では、1 つのアクティビティにボタンが含まれています。 ユーザーがボタンをタップすると、次に示す 3 項目のポップアップ メニューが表示されます。
ポップアップ メニューの作成
最初の手順では、メニューのメニュー リソース ファイルを作成し、それを Resources/menu に配置します。 たとえば、次の XML は、前のスクリーンショット に表示された 3 項目メニューのコードである 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 ();
};
メニュー イベントの処理
ユーザーがメニュー項目を選択すると、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 ();
};