定义菜单
创建菜单的一种方法是使用放置在 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 文件中定义哪些其他选项,请参阅官方文档 http://developer.android.com/guide/topics/resources/menu-resource.html.
使用菜单
您可以在多个位置扩充 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);
在 Activity 或 Fragment 的默认菜单位置(已弃用)
在大多数情况下,活动或片段的默认菜单位置是硬件菜单按钮或 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
在 Fragment 的 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
method.
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;
}
}