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

摘要:
item元素的android:title值可以引用值@OverridepublicbooleanonOptionsItemSelected{开关{caseR.id.mi1://dostbreak;caseR.ids.mi2://dostBreak;caseR.idmi3://dostbrak;case R.id.mi4://dostbleak;}中的字符串资源returntrue;}这一步反映了使用XML生成菜单的好处。到目前为止,我们已经完成了“使用XML生成菜单”的简单演示,并了解了使用资源文件的好处。因此,这是在Android中创建菜单的推荐方法。

回顾前面的几篇,我们都是直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足。比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的ID等。为此,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

Android菜单详解(五)——使用XML生成菜单第1张

编写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
publicbooleanonCreateOptionsMenu(Menu menu) {
MenuInflater inflater
=getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
returntrue;
}
响应菜单项

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

复制代码
@Override
publicbooleanonOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
caseR.id.mi1:
//do sthbreak;
caseR.id.mi2:
//do sthbreak;
caseR.id.mi3:
//do sthbreak;
caseR.id.mi4:
//do sthbreak;
}
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"/>
结语

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

本文转载来自与:http://www.cnblogs.com/codingmyworld/archive/2011/08/28/2155594.html

免责声明:文章转载自《Android菜单详解(五)——使用XML生成菜单》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Vuex入门(5)—— 为什么要用Action管理异步操作【开发工具】OpenLive使用总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android三种左右滑动效果 手势识别

Android三种左右滑动效果 手势识别(转)   手势识别 1.onCreate中添加GestureDetector mGestureDetector;  //监听手势事件 mGestureDetector = new GestureDetector(this, onGestureListener); 2.//实现处理事件 OnGestureList...

TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个

1.这是一个自定义的TextView ,看吧,底下就是代码,应该都可以看懂,这里就不多说了 package com.example.admin.myutilsborder;import android.content.Context;import android.content.res.TypedArray;import android.graphics....

mybatis.mapper-locations 配置多个mapper路径

springboot或者spring项目经常会引用其它项目,把其它项目的Jar包加进来,因为每个项目的包路径不一样,mapper.xml的路径也不一样,这个时候就需要引入多个路径。 项目A,mapper.xml 路径在 resources/mappers/push 下面 项目B,mapper.xml 路径再 resources/mappers/下面 项目A...

android adb 5037端口被自己占用解决方案

我的电脑自动安卓了夜神模拟器后,安卓手机便无法通过adb命令连接电脑,安卓手机使用adb命令连接电脑输入adb devices时提示如下: 于是,我卸载了夜神模拟器,电脑重启后重新进入cmd输入adb devices时依然像上图那样提示,于是我重新从其他同事那里复制了adb相关文件,进行替换我本地的adb文件,重启电脑后依然不行 上图表明adb端口503...

《unity项目》打包安卓APK时Build Setting中的三种Build System

Internal(Default):Unity内置,仅需Android SDK支持。不能导出工程,适用于仅适用Unity开发的工程 apk。 Gradle(New):使用Gradle进行构建,需要Android SDK与Gradle支持,可以导出Android Studio工程 apk ; 选这个才能勾选下面的Export Project,适用于Uni...

Unity3d在Android环境下读取XML的注意事项

PC环境下读取一般可以直接用 XmlDocument doc = new XmlDocument(); doc.Load(path);可以直接加载进来。 path为直接路径。 此时路径可以为streamingAssets文件夹下,也可以是自己自建的文件夹下面,如果是你自己建的文件夹下打包后需要手动添加一下,就是说比如你自己在Assets文件下新建了一个Co...