博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用XML生成菜单
阅读量:6295 次
发布时间:2019-06-22

本文共 2029 字,大约阅读时间需要 6 分钟。

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

定义菜单资源文件

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

编写mainmenu.xml如下:

这里简单的添加了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来实现。

2.为菜单项添加图标

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

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

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

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

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

结语

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

转载于:https://www.cnblogs.com/wuwa/archive/2013/06/04/6191649.html

你可能感兴趣的文章
下载备忘:甘特图实现的代码
查看>>
Linux文本比较命令:diff
查看>>
redux-form的学习笔记二--实现表单的同步验证
查看>>
小评 XenServer 6.0功能
查看>>
Android中获取屏幕的宽和高
查看>>
ACL访问控制列表
查看>>
Lync Server 2010迁移至Lync Server 2013故障排错Part1:缺少McsStandalone.msi
查看>>
域控制器建立教程
查看>>
RHCE 学习笔记(20) ACL
查看>>
Django 和 Ajax 简介
查看>>
Qt的一个颜色选取按钮QColorButton
查看>>
perl 散列数组
查看>>
puppet之service管理
查看>>
Exchange2010server证书申请及分配服务
查看>>
Cassandra 处理客户端请求
查看>>
[WinApi]邮槽通信C/S实例
查看>>
linux NFS配置:NFS相关概念及其配置与查看
查看>>
需求转化到文档维护
查看>>
IIS 6.0安全增强
查看>>
使用Silverlight 2实现水中倒影效果
查看>>