C# 如何在android中创建选项菜单?

C# 如何在android中创建选项菜单?,c#,android,menu,xamarin.android,xamarin,C#,Android,Menu,Xamarin.android,Xamarin,我想用c#和Xamarin Studio在Android应用程序中创建一个简单的选项菜单。我怎么做 我还没有找到任何这样的例子。有人能简单地解释一下如何创建选项菜单吗?定义菜单 创建菜单的一种方法是使用Xamarin.Android项目的Resources/menu/文件夹中的XML文件 例如: Resources/Menu/mymenu.xml <menu xmlns:android="http://schemas.android.com/apk/res/android"> &

我想用c#和Xamarin Studio在Android应用程序中创建一个简单的选项菜单。我怎么做

我还没有找到任何这样的例子。有人能简单地解释一下如何创建选项菜单吗?

定义菜单 创建菜单的一种方法是使用Xamarin.Android项目的Resources/menu/文件夹中的XML文件

例如:

Resources/Menu/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>
然后,您必须将实现接口的类作为侦听器添加到工具栏:

toolbar.SetOnMenuItemClickListener(your_listener_class);
在活动或片段的默认菜单位置(已弃用) 在大多数情况下,活动或片段的默认菜单位置是硬件菜单按钮或操作栏。 可以通过覆盖以下方法在此处添加菜单:

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;
     }
}
在活动中:

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);
}
在片段中:

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);
}
确保在片段的onCreate中将
haspoptions菜单
设置为true,以使其正常工作

处理点击次数

然后,您可以通过覆盖选项ItemSelected来处理对菜单的单击

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以通知系统这一点

备选方案:以编程方式创建菜单 一个非常基本的菜单是通过覆盖
onCreateOptions菜单
方法实现的,如下所示:

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;
}
然后,您可以通过覆盖
onoptionItemSelected
方法来处理选项菜单中的单击

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

我认为经过几次编辑后,这是一个真实有效的问题。为什么不重新打开它呢?同意,事实上我发现答案很有用。