SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.Android オプションメニュー

【 Xamarin 記事一覧 】

1 オプションメニュー

OptionMenu002


オプションメニューは、最も基本的なメニューです。
現在の画面(Activity)でやれること(オプション)を表示するために使用されます。
メニューボタンを押すことで表示されますが、Android3.x以降ではアクションバーの中にも表示されています。

2 OnCreateOptionsMenu

オプションメニューの実装は、極めてシンプルです。
ActivityでOnCreateOptionsMenu()をオーバーライドして、メニューのリソースを指定するだけです。
OnCreateOptionsMenuの戻り値がtrueの場合、オプションメニューが有効になります。


public override bool OnCreateOptionsMenu(IMenu menu){
    MenuInflater.Inflate (Resource.Menu.OptionMenu, menu);
       return true;
}

指定したリソース(OptionMenu.xml)は、下記のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/optionMenu1"
        android:title="menu1" />
  <item android:id="@+id/optionMenu2"
        android:title="menu2" />
  <item android:id="@+id/optionMenu3"
        android:title="menu3" />
</menu>

3 OnMenuItemSelected

オプションメニューが選択された時の処理は、OnMenuItemSelected()をオーバーライドして記述します。

パラメータとして受け取る「IMenuItem item」から選択されたアイテムの情報を取得できます。

public override bool OnMenuItemSelected(int featureId, IMenuItem item){
    switch (item.ItemId) {
        case Resource.Id.optionMenu1:
            Toast.MakeText(this,"selected optionMenu1",ToastLength.Short).Show();
            break;
        case Resource.Id.optionMenu2:
            Toast.MakeText(this, "selected optionMenu2", ToastLength.Short).Show();
            return true;
        case Resource.Id.optionMenu3:
            Toast.MakeText(this, "selected optionMenu3", ToastLength.Short).Show();
            return true;
    }
    return false;
}

4 動的生成

最後に、オプションメニュー用のリソースをxmlでなく、動的に生成している様子を記録しておきます。
OnCreateOptionsMenu()でリソース指定する代わりに、「IMenu menu」に直接Addしています。

public override bool OnCreateOptionsMenu(IMenu menu){
    const int groupId = 0; 
    const int itemId = 100; //ID
    const int order = 0; //表示順
    menu.Add(groupId,itemId, order, "menu1");
    menu.Add(groupId, itemId+1, order+1, "menu2");
    menu.Add(groupId, itemId+2, order+2, "menu3");
    return true;
}

【 Xamarin 記事一覧 】