直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足。
比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的ID等。
为此,Android提供了一种更好的方式,就是把menu也定义为应用程序的资源,通过android对资源的本地支持,使我们可以更方便地实现菜单的创建与响应。b
本文就介绍如何使用XML文件来加载和响应菜单,我们需要做这几步:

1.在/res目录下创建menu文件夹
2.在menu目录下使用与menu相关的元素定义xml文件,文件名是随意的,android会自动为其生成资源ID。
例如:R.menu.menu对应menu目录的menu.xml资源文件
3.使用xml文件的资源ID,将xml文件中定义的菜单项添加到menu对象中
4.响应菜单项时,使用每个菜单项对应的资源ID。

package cn.fansunion.menu;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
import cn.fansunion.R; public class OptionMenuWithXmlActivity extends Activity { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.option_menu);
} public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
} public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_one:
Toast.makeText(this, "你点击了menu_one", Toast.LENGTH_LONG).show();
break;
case R.id.submenu_one:
Toast.makeText(this, "你点击了submenu_one", Toast.LENGTH_LONG).show();
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
}

rec/menu目录
menu.xml

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
android:id="@+id/menu_one"
android:orderInCategory="3"
android:title="Android应用开发真有趣"/> <item
android:id="@+id/menu_two"
android:orderInCategory="2"
android:title="iOS开发也不错"/> <item
android:id="@+id/menu_three"
android:enabled="false"
android:orderInCategory="4"
android:title="Java服务端也不错"/> <!-- Part 2:子menu的设置,将在menuItem内部嵌套一个<Menu>,在这个例子中的子菜单,试验了快捷键的方式 -->
<item
android:id="@+id/submenu"
android:orderInCategory="3"
android:title="小雷的兴趣">
<menu > <item
android:id="@+id/submenu_one"
android:alphabeticShortcut="n"
android:title="互联网技术"
android:visible="true"/> <item
android:id="@+id/submenu_two"
android:alphabeticShortcut="g"
android:title="投资理财"
android:visible="true"/>
</menu></item> </menu>

更多关于通过XML定义Menu的信息,参考以下3篇文章,Copy一大堆别人的,大家都一样的API和属性用法,挺没有意思的。

参考资料:
Android通过XML来定义Menu
http://blog.csdn.net/jaycee110905/article/details/8765082

Android 中自定义 Menu 资源
http://ybxu-123.blog.163.com/blog/static/594737702010680575834/

Android菜单详解(五)——使用XML生成菜单
http://www.cnblogs.com/codingmyworld/archive/2011/08/28/2155594.html

Android通过XML来定义Menu的更多相关文章

  1. android学习笔记37——Menu资源

    Menu菜单资源 android应用推荐使用XML来定义菜单,其可提供更好的解耦方式. 菜单资源通常位于res/menu文件夹下,其菜单根元素为<menu.../>,menu元素下可包含子 ...

  2. android:themes.xml

    <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2006 The Andr ...

  3. Android实现XML解析技术

    转载:Android实现XML解析技术 本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为 ...

  4. Android开发手记(12) Menu的使用

    Android中的Menu分为三种,分别为:OptionsMenu(选项菜单).ContextMenu(上下文菜单).SubMenu(子菜单). 1.OptionsMenu 按Menu键就会显示,用于 ...

  5. 【转】android小结(一)之menu

    原文网址:http://zhouyunan2010.iteye.com/blog/1151215 android提供有三种menu类型 一.Options Menu(选项菜单) 这是一组item选项的 ...

  6. android 各种xml的作用

    1.arrays.xml     定义数组 <resources> <string-array name="proxy_types"> <item&g ...

  7. Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知

    1.activity_main.xml 描述: 定义了一个TextView和三个按钮 <?xml version="1.0" encoding="utf-8&quo ...

  8. Android中创建option menu

    1.首先在res目录下新建一个menu文件夹,右击res目录->New->Directory,输入文件夹名menu,点击OK. 接着在这个文件夹下再新建一个名叫main的菜单文件,右击me ...

  9. android中的菜单Menu

    Menu是一个接口, 他有2个子接口, SubMenu和ContextMenu; 前者菜单常见于按home键就会出现 ,后者是一个上下文菜单, 一般点击某个条目会在手机屏幕中出现一个类似悬浮窗口的菜单 ...

随机推荐

  1. swift语言点评十五-$0

    import UIKitimport XCPlayground class ViewController: UIViewController { func action() { print(" ...

  2. CentOS 6.9 CentOS 7.4 自动安装系统 kickstart

    通过ks文件 实现 CentOS 6.9 & 7.4 自动安装系统 环境: VMware 14.0 Pro版 光盘镜像: CentOS-6.9-x86_64-minimal.iso ks文件生 ...

  3. javascript中实现继承的几种方式

    javascript中实现继承的几种方式 1.借用构造函数实现继承 function Parent1(){ this.name = "parent1" } function Chi ...

  4. 常用的字符串方法 String ;

      字符串: 1,str.charAt(num);//根据下标查找字符串中对应的字符,返回对应下标的字符; 2,str.charCodeAt(num);//字符串中下标对应的那位字符的 Unicode ...

  5. POJ-2420 A Star not a Tree? 梯度下降 | 模拟退火

    题目链接:https://cn.vjudge.net/problem/POJ-2420 题意 给出n个点,找一个点,使得这个点到其余所有点距离之和最小. 思路 一开始就在抖机灵考虑梯度下降,猜测是个凸 ...

  6. POJ-3348 Cows 计算几何 求凸包 求多边形面积

    题目链接:https://cn.vjudge.net/problem/POJ-3348 题意 啊模版题啊 求凸包的面积,除50即可 思路 求凸包的面积,除50即可 提交过程 AC 代码 #includ ...

  7. virt-install 创建虚拟机

    [root@kvm-server vm]# qemu-img create -f qcow2 centos69b-disk0.qcow2 10G Formatting 'centos69b-disk0 ...

  8. 【BZOJ 1588】 [HNOI2002]营业额统计

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每天的最小波动值指的是和之前所有天的差值的绝对值中的最小值. 用set.的lower_bound函数. 每次找和他差值最小的数字就好 ...

  9. 11.Laravel5学习笔记:扩展 Validator 类

    简单介绍 在 Laravel5 中,本身已经提供了丰富的验证规则供我们使用,可是天下应用奇葩多,做为程序猿你会发现永远都有新的验证规则诞生,光是组合已经解救不了你的项目了.这个时候就须要我们扩展 Va ...

  10. STL_算法_查找算法(binary_search、includes)

    C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) 全部容器适用(O(log(n)))     已序区间查找算法 binary_search             //二分查 ...