把menu也定义为应用程序的资源,通过android对资源的本地支持,使我们可以更方便地实现菜单的创建与响应。这一篇就介绍如何使用XML文件来加载和响应菜单,我们需要做这几步:

  1. 在/res目录下创建menu文件夹
  2. 在menu目录下使用与menu相关的元素定义xml文件,文件名是随意的,android会自动为其生成资源ID。例如:R.menu.mainmenu对应menu目录的mainmenu.xml资源文件
  3. 使用xml文件的资源ID,将xml文件中定义的菜单项添加到menu对象中
  4. 响应菜单项时,使用每个菜单项对应的资源ID

下面就使用xml的方式完成《Android菜单详解(二)——创建并响应选项菜单》中的options menu。

定义菜单资源文件

在res目录下创建menu文件夹,在menu下创建一个xml资源文件,我这里叫做mainmenu.xml


Android菜单详解(五)——使用XML生成菜单_xml

编写mainmenu.xml如下:


<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- group1 -->
<group android:id="@+id/group1">
<item android:id="@+id/mi1"
          android:title="item1"/>
<item android:id="@+id/mi2"
          android:title="item2"/>
</group>
<!-- group 2 -->
<group android:id="@+id/group2">
<item android:id="@+id/mi3"
          android:title="item3"/>
<item android:id="@+id/mi4"
          android:title="item4"/>
</group>

</menu>


这里简单的添加了4个菜单项,并将其分为2组。item元素的android:title值可以引用values中的string资源。

使用MenuInflater添加菜单项

inflater在android中建立了从资源文件到对象的桥梁,MenuInflater即把菜单xml资源转换为对象并添加到menu对象中,它可以通过activity的getMenuInflater()得到。我们在MainActivity中重写onCreateOptionsMenu(...)方法。


@Override
publicboolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mainmenu, menu);
returntrue;
}


响应菜单项

最后重写onOptionsItemSeleted(...)方法。


@Override
publicboolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.mi1:
// do sth
break;
case R.id.mi2:
// do sth
break;
case R.id.mi3:
// do sth
break;
case R.id.mi4:
// do sth
break;
    }
returntrue;
}


菜单项ID的创建与管理就不用我们操心了,全部交给android去做吧!

android中创建菜单的推荐方式。实际上,我们在代码中对菜单项或分组的操作都能在xml文件中完成,下面就简单介绍一些比较常用的功能。(谷歌提供的API demos中有最全面的示例)

更多菜单资源文件的功能

1.资源文件实现子菜单

子菜单通过在item元素中嵌套menu来实现。


<item android:title="系统设置">
<menu>
<item android:id="@+id/mi_display_setting"
            android:title="显示设置"/>
<item android:id="@+id/mi_network_setting"
            android:title="网络设置"/>
<!-- 别的菜单项 -->
</menu>
</item>


2.为菜单项添加图标


<item android:id="@+id/mi_exit"
    android:title="退出"
    android:icon="@drawable/exit"/>


3.设置菜单项的可选出现

使用android:checkableBehavior设置一组菜单项的可选策略,可选值为:none, all, single


<group android:id="..."
    android:checkableBehavior="all">
<!-- 菜单项 -->
</group>


使用android:checked设置特定菜单项


<item android:id="..."
    android:title="sometitle"
    android:checked="true"/>


4.设置菜单项可用/不可用


<item android:id="..."
    android:title="sometitle"
    android:enabled="false"/>


5.设置菜单项可见/不可见


<item android:id="..."
    android:title="sometitle"
    android:visible="false"/>


结语

本篇是Android菜单详解系列的最后一篇,本系列详细介绍了android中各种常用菜单的使用技巧和注意事项,希望能帮助大家更好的理解,也期待与各位交流开发中的心得:)