Android菜单详解(五)——使用XML生成菜单
2016-05-28 16:40
393 查看
回顾前面的几篇,我们都是直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足。比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的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如下:
这里简单的添加了4个菜单项,并将其分为2组。item元素的android:title值可以引用values中的string资源。
inflater在android中建立了从资源文件到对象的桥梁,MenuInflater即把菜单xml资源转换为对象并添加到menu对象中,它可以通过activity的getMenuInflater()得到。我们在MainActivity中重写onCreateOptionsMenu(...)方法。
最后重写onOptionsItemSeleted(...)方法。
这一步最大的体现了使用XML生成菜单的好处。android不仅为我们定义的xml文件生成了资源ID,同样可以为group,menu item来自动生成ID(就像为布局中定义的view生成id那样)。这样菜单项ID的创建与管理就不用我们操心了,全部交给android去做吧!
至此,我们完成了一个简单的“使用XML生成菜单”的demo,并从中体会到了使用资源文件的好处,因此这是android中创建菜单的推荐方式。实际上,我们在代码中对菜单项或分组的操作都能在xml文件中完成,下面就简单介绍一些比较常用的功能。(谷歌提供的API demos中有最全面的示例)
1.资源文件实现子菜单
子菜单通过在item元素中嵌套menu来实现。
2.为菜单项添加图标
3.设置菜单项的可选出现
使用android:checkableBehavior设置一组菜单项的可选策略,可选值为:none, all, single
使用android:checked设置特定菜单项
4.设置菜单项可用/不可用
5.设置菜单项可见/不可见
本篇是Android菜单详解系列的最后一篇,本系列详细介绍了android中各种常用菜单的使用技巧和注意事项,希望能帮助大家更好的理解,也期待与各位交流开发中的心得:)
在/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如下:
<?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"/>
结语
本篇是Android菜单详解系列的最后一篇,本系列详细介绍了android中各种常用菜单的使用技巧和注意事项,希望能帮助大家更好的理解,也期待与各位交流开发中的心得:)
相关文章推荐
- android 设计模式之单例模式详解
- Android菜单详解(四)——使用上下文菜单ContextMenu
- Android菜单详解(三)——SubMenu和IconMenu
- Android菜单详解(二)——创建并响应选项菜单
- Android开发---摇一摇功能
- Android菜单详解(一)——理解android中的Menu
- Android底层开发之红外遥控驱动移植
- android 蓝牙源码分析
- android 取消标题,程序意外停止
- 解决 android 输入法弹出输入框被遮挡的问题
- Android权限适配方案(API 4+)
- Android中更安全的使用AsyncTask
- Android实战第二篇——模仿社交软件探探(一)
- Android客户端性能优化(魅族资深工程师毫无保留奉献)
- android中对线程池的理解与使用
- Fragment+ViewPager的简单使用 Android
- Android中判断当前运行activity名的方法
- android 颜色配置
- android AsyncTask介绍
- 在eclipse里卸载已安装的插件[例如Android Development Tools ADT]