直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足。
比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的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. hdu1010 - dfs,奇偶剪枝

    题目链接 给一个迷宫,问从起点到终点存不存在一条长度为T的路径. ------------------------------------------------------------------- ...

  2. 监控RMAN操作进度的脚本

    REM ------------------------------- REM Script to monitor rman backup/restore operations REM To run ...

  3. schema文件及XML文件的DOM和Sax解析

    schema文件 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="htt ...

  4. 模块 -logging

    模块 -logging 一:在控制台显示:默认 import logging logging.debug("debug") logging.info("debug&quo ...

  5. Python的那些坑--------括号篇

    在Python中遇见了带不带括号的问题,我目前的是这三种,有问题请指出.如果有其他的,我后续会更新 一  函数带不带括号: def a(x): return x print(a) #不带括号调用的结果 ...

  6. Java读书笔记一(异常处理)

    1.介绍 在开发过程中.都会遇到程序执行时的异常,比如逻辑错误.硬件故障等,本篇博客将会具体的介绍一下Java中的异常处理机制. 2.Try和Catch捕获异常 我们在处理异常过程中经经常使用到的就是 ...

  7. HDU 5274(LCA + 线段树)

    Dylans loves tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  8. BZOJ1830: [AHOI2008]Y型项链 & BZOJ1789: [Ahoi2008]Necklace Y型项链

    [传送门:BZOJ1830&BZOJ1789] 简要题意: 给你3个字符串,你每一次可以在一个字符串的末端删除一个字符或添加一个字符,你需要用尽量少的操作次数使得这3个字符串变成一样的. 题解 ...

  9. Tuples as return values

    Strictly speaking, a function can only return one value, but if the value is a tuple, the effect is ...

  10. BZOJ 4269 高斯消元求线性基

    思路: 最大: 所有线性基异或一下 次大: 最大的异或一下最小的线性基 搞定~ //By SiriusRen #include <cstdio> #include <algorith ...