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

    本安装说明基于CentOS7.1的版本,其他版本也基本可以参考. 1. 安装JDK1.8 CentOS7.1版本安装时忘记是默认还是自己选中的安装了OpenJDK,也是1.8的版本,因为ActiveM ...

  2. BootStrap学习(三)——重写首页之导航栏和轮播图

    1.按钮 1)帮助文档:http://v3.bootcss.com/css/#buttons 2).btn-lg..btn-sm..btn-xs可以设置按钮的不同尺寸 3).active类设置按钮的激 ...

  3. OpenGL编程(七)3D模型的深度(z轴)检测

    下图是我们要修改后的效果图: 一.深度检测 1.模型Z轴显示有问题: 上一次试验中,如果认真留意,会发现一个问题.当控制锥体在左右或上下旋转时,你会发现锥体看起来是在+-180度之间来回摆动,而不是3 ...

  4. js判断数据类型方法

    //一般js中我们判断数据类型 都使用typeof 这里采用 Object.prototype.toString function type (val) { return Object.prototy ...

  5. hiho169周 - 表达式求值

    题目链接 计算表达式100*(2+12)-(20/3)*2 ---------------------------------------------------------------------- ...

  6. Ubantu 14.04下安装高版本cmake

    Ubantu14.04 下自带的cmake版本比较低(默认为2.8),这里我们从源码编译高版本cmake: 先卸载电脑上安装的cmake (如何已安装的话): sudo apt-get autorem ...

  7. STM8S103 解决Rom空间不足 & Map文件分析

    STM8S103只有8KRom,很容易造成空间不足.对于空间不足,我们就要从map文件着手分析,究竟哪些函数占了多少空间,map文件分为几部分:Segments(总括了各个段所占的空间), Modul ...

  8. 优动漫PAINT画树教程

    依次解析画树要点!让画树不再是难事~ 优动漫PAINT下载:http://wm.makeding.com/iclk/?zoneid=18597

  9. FCC高级编程篇之Symmetric Difference

    Symmetric Difference Create a function that takes two or more arrays and returns an array of the sym ...

  10. Collectio集合,List《ArrayList,LinkedList》

    集合: Collection类 package com.collection.demo; import java.util.ArrayList; import java.util.Arrays; im ...