12

C# と Xamarin Studio を使用して、Android アプリケーションで簡単なオプション メニューを作成したいと考えています。どうすればいいですか?

これの C# の例は見つかりませんでした。オプションメニューの作り方を簡単に教えてください。

4

1 に答える 1

33

メニューの定義

メニューを作成する 1 つの方法は、Xamarin.Android プロジェクトの Resources/menu/ フォルダーに配置された XML ファイルを使用することです。

例えば:

リソース/メニュー/mymenu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/item1"
        android:title="Item 1"/>
  <item android:id="@+id/item2"
        android:title="Item 2"/>
  <item android:id="@+id/item3"
        android:title="Item 3"/>
</menu>

メニュー xml ファイルで定義できるその他のオプションについては、公式ドキュメントを参照してください。

メニューの使用

複数の場所で xml メニューをインフレートできます。いくつかの例:

ツールバー内

Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.mytoolbar);
toolbar.InflateMenu(Resource.Menu.mymenu);

クリックを処理する

ツールバー メニューのクリック イベントを処理するにはToolbar.IOnMenuItemClickListener、次のメソッドをオーバーライドしてインターフェイスを実装する必要があります。

public bool OnMenuItemClick(IMenuItem item)
{
    switch (item.ItemId)
    {
        case Resource.Id.item1: 
                //Do stuff for item1
                return true;
        case Resource.Id.item2: 
                //Do stuff for item2
                return true;
        case Resource.Id.item3:
                //Do stuff for item3
                return true;
        default:
                return false;
     }
}

次に、インターフェイスを実装するクラスをリスナーとしてツールバーに追加する必要があります。

toolbar.SetOnMenuItemClickListener(your_listener_class);

アクティビティまたはフラグメントのデフォルトのメニューの場所 (非推奨)

ほとんどの場合、アクティビティまたはフラグメントの既定のメニューの場所は、ハードウェア メニュー ボタンまたは ActionBar のいずれかです。ここにメニューを追加するには、次のメソッドをオーバーライドします。

アクティビティで:

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

フラグメント内:

public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
{
    inflater.Inflate(Resource.Menu.mymenu, menu);
}

HasOptionsMenuこれを機能させるには、フラグメントの onCreate で true に設定していることを確認してください。

クリックを処理する

その後、オーバーライドしてメニューへのクリックを処理できますOnOptionsItemSelected

public override bool OnOptionsItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
       case Resource.Id.item1: 
                //Do stuff for item1
                return true;
        case Resource.Id.item2: 
                //Do stuff for item2
                return true;
        case Resource.Id.item3:
                //Do stuff for item3
                return true;
        default:
                return false;
     }
}

選択した項目を処理した後、true を返してシステムに通知します。

代替手段: プログラムによるメニューの作成

OnCreateOptionsMenu非常に基本的なメニューは、次のようにメソッドをオーバーライドすることで実現されます。

public override bool OnCreateOptionsMenu(IMenu menu)
{
      menu.Add(0,0,0,"Item 0");
      menu.Add(0,1,1,"Item 1");
      menu.Add(0,2,2,"Item 2");
      return true;
}

その後、メソッドをオーバーライドすることで、オプション メニューのクリックを処理できますOnOptionsItemSelected

public override bool OnOptionsItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
        case 0: 
                //Do stuff for item 0
                return true;
        case 1: 
                 //Do stuff for item 1
                return true;
        case 2: 
                //Do stuff for item 2
                return true;
        default:
                return false;
     }
}
于 2013-03-05T13:58:12.220 に答える