使用XML生成菜单
回顾前面的几篇,我们都是直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足。比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的ID等。为此,Android提供了一种更好的方式,就是把menu也定义为应用程序的资源,通过android对资源的本地支持,使我们可以更方便地实现菜单的创建与响应。这一篇就介绍如何使用XML文件来加载和响应菜单,我们需要做这几步:
在/res目录下创建menu文件夹 在menu目录下使用与menu相关的元素定义xml文件,文件名是随意的,android会自动为其生成资源ID。例如:R.menu.mainmenu对应menu目录的mainmenu.xml资源文件 使用xml文件的资源ID,将xml文件中定义的菜单项添加到menu对象中 响应菜单项时,使用每个菜单项对应的资源ID下面就使用xml的方式完成《Android菜单详解(二)——创建并响应选项菜单》中的options menu。
定义菜单资源文件在res目录下创建menu文件夹,在menu下创建一个xml资源文件,我这里叫做mainmenu.xml
编写mainmenu.xml如下:
![复制代码](http://common.cnblogs.com/images/copycode.gif)
?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
![复制代码](http://common.cnblogs.com/images/copycode.gif)
这里简单的添加了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;
}
![复制代码](http://common.cnblogs.com/images/copycode.gif)
@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;
}
![复制代码](http://common.cnblogs.com/images/copycode.gif)
这一步最大的体现了使用XML生成菜单的好处。android不仅为我们定义的xml文件生成了资源ID,同样可以为group,menu item来自动生成ID(就像为布局中定义的view生成id那样)。这样菜单项ID的创建与管理就不用我们操心了,全部交给android去做吧!
至此,我们完成了一个简单的“使用XML生成菜单”的demo,并从中体会到了使用资源文件的好处,因此这是android中创建菜单的推荐方式。实际上,我们在代码中对菜单项或分组的操作都能在xml文件中完成,下面就简单介绍一些比较常用的功能。(谷歌提供的API demos中有最全面的示例)
更多菜单资源文件的功能1.资源文件实现子菜单
子菜单通过在item元素中嵌套menu来实现。
![复制代码](http://common.cnblogs.com/images/copycode.gif)
item android:title="系统设置"
menu
item android:id="@+id/mi_display_setting"
android:title="显示设置"/
item android:id="@+id/mi_network_setting"
android:title="网络设置"/
!-- 别的菜单项 --
/menu
/item
![复制代码](http://common.cnblogs.com/images/copycode.gif)
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中各种常用菜单的使用技巧和注意事项,希望能帮助大家更好的理解,也期待与各位交流开发中的心得:)
奥特曼超人 KARL-Dujinyang-奥特曼超人。作者目前任职于银狐、泡椒游戏公司,曾任职腾为CTO,CSDN技术专家,曾创办过创业go、造梦工厂、米奇云,万能孵化器等,领域涉及逆向安全专家以及全栈工程师,作者目前出书中。
相关文章
- 《转》 在C++中使用TinyXML2解析xml
- xml
- asp.net 生成网站地图 sitemap.xml
- SSM(Spring+SpringMVC+Mybatis)极简整合完整示例(结构清晰三大框架仅需一个xml配置文件!)
- 怎么去掉 IDEA 中 XML 显示的屎黄色
- 老了,问题定位难了,xml编码解析
- 使用XmlTextWriter生成XML文件的方法
- 使用XML序列化器生成XML文件和利用pull解析XML文件
- json.net xml转换为json格式时,如何将指定节点转换成数组
- 命令行方式使用abator.jar生成ibatis相关代码和sql语句xml文件
- Android 下用 Pull 解析和生成 XML
- pytmx错误: “XML tile elements are no longer supported. Must use base64 or csv map formats.“
- Step-by-Step XML Free Spring MVC 3 Configuration--reference
- 【.net 深呼吸】聊聊WCF服务返回XML或JSON格式数据
- Could not open ServletContext resource [/WEB-INF/xxx-servlet.xml]
- Java SAX解析XML
- 【SpringBoot】基于 Maven 的 pom.xml 配置详解