Android提供了一种方式把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

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

这一步最大的体现了使用XML生成菜单的好处。android不仅为我们定义的xml文件生成了资源ID,同样可以为group,menu item来自动生成ID(就像为布局中定义的view生成id那样)。这样菜单项ID的创建与管理就不用我们操心了,全部交给android去做吧!

至此,我们完成了一个简单的“使用XML生成菜单”的demo,并从中体会到了使用资源文件的好处,因此这是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"/>
ref:http://www.cnblogs.com/codingmyworld/archive/2011/08/28/2155594.html

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android数据保存之文件保存
  4. react-native 启动页(react-native link react-native-splash-scr
  5. 2011.07.05(3)——— android PopupWindow 以及activity切换的动
  6. SeekBar 和 RatingBar
  7. Android(安卓)获取assets的绝对路径
  8. Android之音频录音
  9. Android(安卓)删除文件夹以及文件夹中的文件

随机推荐

  1. fill_parent和wrap_content 区别和使用效
  2. android数据存储之File
  3. android开关飞行模式的方法
  4. 一个项目搞明白Android(安卓)启动模式和t
  5. android 中apk如何防止反编译?
  6. Android(安卓)API——自定义组件(Custom C
  7. android API key 如何获取
  8. 详解Android获取系统内核版本的方法与实
  9. Android源码在线阅读
  10. Android应用程序的调试方法