如何在android中创建一个选项菜单?

时间:2013-03-05 12:45:24

标签: c# android menu xamarin.android xamarin

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

我还没有找到任何C#示例。有人可以简单解释一下如何创建一个选项菜单吗?

1 个答案:

答案 0 :(得分:33)

定义菜单

创建菜单的一种方法是使用放置在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文件中定义的其他选项,请参阅the official documentation

使用菜单

您可以在多个位置充气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);
}

确保在片段的onCreate中将HasOptionsMenu设置为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;
     }
}