转载请注明出处:http://blog.csdn.net/fth826595345/article/details/9199393

先来看Menu  XML文件如何编写:

  1. <?xml version="1.0" encoding="utf-8"?>
  2.  
  3. <!-- Menu对应一个Menu的格式 -->
  4.  
  5. <menu xmlns:android="http://schemas.android.com/apk/res/android">
  6.  
  7. <!-- 我们分三种情况进行设置 -->
  8.  
  9. <!-- Part 1 :普通情况,我们增加三个MenuItem,item对应MenuItem的格式。item中的android:id直接就是item的ID,即我们menu.add()中的第二个参数。 -->
  10.  
  11. <item android:id="@+id/c11_close"
  12.  
  13. <!-- title为显示的文字,即menu.add()中的第三个参数的第四个参数,可采用@string/xxx -->
  14.  
  15. android:title="Close"
  16.  
  17. <!-- orderInCategory表明摆放的顺序,不一定从0还是计算,但必须大于等于0,数值小的位于前,如果数值一样,在我们这个例子中3又两个值,则安顺序摆放,此相当于menu.add()中的第三个参数order。当然我们建议从0,1,2,3....这样依次给出,并且与XML行文的顺序一致。 -->
  18.  
  19. android:orderInCategory = "3"
  20.  
  21. <!-- icon设置图标,不言自喻 -->
  22.  
  23. android:icon="@drawable/android_focused" />
  24.  
  25. <item android:id="@+id/c11_no_icon"
  26.  
  27. android:orderInCategory = "2"
  28.  
  29. android:title = "Sans Icon" />
  30.  
  31. <item android:id="@+id/c11_disabled"
  32.  
  33. android:orderInCategory="4"
  34.  
  35. android:enabled="false"
  36.  
  37. android:title="Disabled" />
  38.  
  39. <!-- Part 2 :Group的情况,我们在Group中放入2个item,如果我们要显示3.4的方式,可以增加group的参数android:checkableBehavior来设置,single表示radio box,all表示checkbox,none表示checkable=flase。group中的android:id就是Gourp_ID,即menu.add()中的第一个参数。在这个例子中,我们设置这个group不可视,如果需要显示,代码为:menu.setGroupVisible(R.id.c11_other_stuff, true);-->
  40.  
  41. <group android:id="@+id/c11_other_stuff"
  42.  
  43. <!-- Item由android:orderInCategory来设置item的顺序,在Group中我们可以通过menuCategory来设置另一个category,里面的顺序和default Category是不方在一起比较,例如这里么我们给出0和5,如图所示,在显示完default Category,再显示这个sendonary的内容。 -->
  44.  
  45. android:menuCategory="secondary"
  46.  
  47. android:checkableBehavior="single"
  48.  
  49. android:visible="false" >
  50.  
  51. <item android:id="@+id/c11_later"
  52.  
  53. android:orderInCategory="0"
  54.  
  55. android:title="2nd-To-Last" />
  56.  
  57. <item android:id="@+id/last"
  58.  
  59. android:orderInCategory="5"
  60.  
  61. android:title="Last" />
  62.  
  63. </group>
  64.  
  65. <!-- Part 3 :子menu的设置,将在menuItem内部嵌套一个<Menu>,在这个例子中的子菜单,试验了快捷键的方式 -->
  66.  
  67. <item android:id="@+id/c11_submenu"
  68.  
  69. android:orderInCategory="3"
  70.  
  71. android:title="A submenu" >
  72.  
  73. <menu>
  74.  
  75. <item android:id="@+id/c11_non_ghost"
  76.  
  77. android:title="Non-Ghost"
  78.  
  79. android:visible="true"
  80.  
  81. android:alphabeticShortcut="n" />
  82.  
  83. <item android:id="@+id/c11_ghost"
  84.  
  85. android:title="Ghost"
  86.  
  87. android:visible="true"
  88.  
  89. android:alphabeticShortcut="g" />
  90.  
  91. </menu>
  92.  
  93. </item> <!-- end of Part 3 -->
  94.  
  95. </menu>

1.创建menu xml设置菜单

1.在res/menu目录下定义如下菜单xml文件;

  1. <?xml version="1.0" encoding="utf-8"?>
  2.  
  3. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  4.  
  5. <item
  6.  
  7. android:id="@+id/close"
  8.  
  9. android:icon="@drawable/ic_launcher"
  10.  
  11. android:orderInCategory="3"
  12.  
  13. android:title="Close"/>
  14.  
  15. <item
  16.  
  17. android:id="@+id/no_icon"
  18.  
  19. android:orderInCategory="2"
  20.  
  21. android:title="Sans Icon"/>
  22.  
  23. <item
  24.  
  25. android:id="@+id/disabled"
  26.  
  27. android:enabled="true"
  28.  
  29. android:orderInCategory="4"
  30.  
  31. android:title="Disabled"/>
  32.  
  33. <!-- orderInCategory表示的是item的排序-->
  34.  
  35. <group
  36.  
  37. android:id="@+id/other_stuff"
  38.  
  39. android:menuCategory="secondary"
  40.  
  41. android:visible="true" >
  42.  
  43. <item
  44.  
  45. android:id="@+id/later"
  46.  
  47. android:orderInCategory="0"
  48.  
  49. android:title="2nd-To-Last"/>
  50.  
  51. <item
  52.  
  53. android:id="@+id/last"
  54.  
  55. android:orderInCategory="1"
  56.  
  57. android:title="Last"/>
  58.  
  59. </group>
  60.  
  61. <!--表示的是二级菜单-->
  62.  
  63. <item
  64.  
  65. android:id="@+id/submenu"
  66.  
  67. android:orderInCategory="3"
  68.  
  69. android:title="A Submenu">
  70.  
  71. <menu>
  72.  
  73. <item
  74.  
  75. android:id="@+id/non_ghost"
  76.  
  77. android:alphabeticShortcut="n"
  78.  
  79. android:title="Non-Ghost"
  80.  
  81. android:visible="true"/>
  82.  
  83. <item
  84.  
  85. android:id="@+id/ghost"
  86.  
  87. android:alphabeticShortcut="g"
  88.  
  89. android:title="A Ghost"
  90.  
  91. android:visible="true"/>
  92.  
  93. </menu>
  94.  
  95. </item>
  96.  
  97. </menu>

2.在代码使用

  1. package com.src.hero.org;
  2.  
  3. import android.app.Activity;
  4.  
  5. import android.os.Bundle;
  6.  
  7. import android.util.Log;
  8.  
  9. import android.view.Menu;
  10.  
  11. import android.view.MenuInflater;
  12.  
  13. import android.view.MenuItem;
  14.  
  15. /**
  16.  
  17. * Receiver To Study
  18.  
  19. *
  20.  
  21. * @author Hero
  22.  
  23. *
  24.  
  25. */
  26.  
  27. public class ReceiverActivity extends Activity {
  28.  
  29. /** Called when the activity is first created. */
  30.  
  31. private static final String TAG="ReceiverActivity";
  32.  
  33. @Override
  34.  
  35. public void onCreate(Bundle savedInstanceState) {
  36.  
  37. super.onCreate(savedInstanceState);
  38.  
  39. setContentView(R.layout.main);
  40.  
  41. }
  42.  
  43. @Override
  44.  
  45. public boolean onCreateOptionsMenu(Menu menu) {
  46.  
  47. // TODO Auto-generated method stub
  48.  
  49. MenuInflater mflater=new MenuInflater(this);
  50.  
  51. mflater.inflate(R.menu.menuitem, menu);
  52.  
  53. return super.onCreateOptionsMenu(menu);
  54.  
  55. /*或者:
  56.  
  57. getMenuInflater().inflate(R.menu.menuitem);
  58.  
  59. return true; */
  60.  
  61. }
  62.  
  63. @Override
  64.  
  65. public boolean onOptionsItemSelected(MenuItem item) {
  66.  
  67. // TODO Auto-generated method stub
  68.  
  69. switch(item.getItemId()){
  70.  
  71. case R.id.close:
  72.  
  73. Log.v(TAG, "------------close");
  74.  
  75. break;
  76.  
  77. case R.id.no_icon:
  78.  
  79. Log.v(TAG, "------------noicon");
  80.  
  81. break;
  82.  
  83. case R.id.submenu:
  84.  
  85. Log.v(TAG, "------------submenu");
  86.  
  87. break;
  88.  
  89. case R.id.non_ghost:
  90.  
  91. Log.v(TAG, "------------non_ghost");
  92.  
  93. break;
  94.  
  95. case R.id.ghost:
  96.  
  97. Log.v(TAG, "------------ghost");
  98.  
  99. break;
  100.  
  101. case R.id.disabled:
  102.  
  103. Log.v(TAG, "------------disabled");
  104.  
  105. break;
  106.  
  107. case R.id.last:
  108.  
  109. Log.v(TAG, "------------last");
  110.  
  111. break;
  112.  
  113. case R.id.later:
  114.  
  115. Log.v(TAG, "------------laster");
  116.  
  117. break;
  118.  
  119. default:
  120.  
  121. break;
  122.  
  123. }
  124.  
  125. return super.onOptionsItemSelected(item);
  126.  
  127. }
  128.  
  129. }

----上面方法对应的效果图

1.通过代码创建设置菜单

1.直接在Activity中重写父类相应的方法;

  1. // 在onCreateOptionsMenu设置菜单内容;
  2.  
  3. @Override
  4. public boolean onCreateOptionsMenu(Menu menu) {
  5.  
  6. // 模拟原生系统音乐播放器歌曲的Menu功能
  7.  
  8. // 调用Menu.add方法添加Menu项
  9.  
  10. /*
  11. *
  12. * menu.add(0, 0, 0, "全部播放");
  13. *
  14. *
  15. *
  16. * menu.add(0, 1, 1, "音乐库");
  17. *
  18. *
  19. *
  20. * menu.add(0, 2, 2, "全部随机播放");
  21. */
  22.  
  23. menu.add(0, 0, 0, "全部播放").setIcon(android.R.drawable.ic_menu_camera);
  24.  
  25. menu.add(0, 1, 1, "音乐库").setIcon(android.R.drawable.ic_menu_help);
  26.  
  27. menu.add(0, 2, 2, "全部随机播放").setIcon(android.R.drawable.ic_menu_revert);
  28.  
  29. return super.onCreateOptionsMenu(menu);
  30.  
  31. }
  32.  
  33. // 在onPrepareOptionsMenu中动态改Menu
  34.  
  35. @Override
  36. public boolean onPrepareOptionsMenu(Menu menu) {
  37.  
  38. // TODO Auto-generated method stub
  39.  
  40. /*
  41. *
  42. * 在onPrepareOptionsMenu(Menumenu)函数中,首先需要调用:
  43. *
  44. * super.onPrepareOptionsMenu(menu);
  45. *
  46. * menu.clear();
  47. *
  48. * 如果没有clear而直接add的话,那么菜单中菜单项是会“追加”的,这样随着你不停的点menu键,菜单项就不停的增加。
  49. *
  50. * 另外,android系统默认的菜单样式是支持最多3个一行,如果有4项就每行2个有2行...如果想自定义样式,可以使用xml文件定义样式。
  51. */
  52.  
  53. if (1 < 2)
  54.  
  55. {
  56.  
  57. menu.add(0, 0, 0, "menu_test").setIcon(
  58. android.R.drawable.ic_menu_camera);
  59.  
  60. menu.add(0, 1, 1, "音乐库").setIcon(android.R.drawable.ic_menu_help);
  61.  
  62. menu.add(0, 2, 2, "全部随机播放").setIcon(
  63. android.R.drawable.ic_menu_revert);
  64.  
  65. }
  66.  
  67. else
  68.  
  69. {
  70.  
  71. menu.add(0, 0, 0, "全部播放")
  72. .setIcon(android.R.drawable.ic_menu_camera);
  73.  
  74. menu.add(0, 1, 1, "音乐库").setIcon(android.R.drawable.ic_menu_help);
  75.  
  76. menu.add(0, 2, 2, "全部随机播放").setIcon(
  77. android.R.drawable.ic_menu_revert);
  78.  
  79. }
  80. return super.onCreateOptionsMenu(menu);
  81.  
  82. }
  83.  
  84. // 在onOptionsItemSelected方法中设置选择菜单的监听事件
  85.  
  86. /**
  87. *
  88. * 如果要添加点击事件,则要覆盖onOptionsItemSelected(MenuItem item)方法。
  89. *
  90. * 给MenuItem设置事件监听的方法
  91. *
  92. *
  93. */
  94.  
  95. @Override
  96. public boolean onOptionsItemSelected(MenuItem item) {
  97.  
  98. switch (item.getItemId()) {
  99.  
  100. case 0:
  101.  
  102. System.out.println("音乐");
  103.  
  104. break;
  105.  
  106. case 1:
  107.  
  108. System.out.println("音乐库");
  109.  
  110. break;
  111.  
  112. case 2:
  113.  
  114. System.out.println("全部随机播放");
  115.  
  116. break;
  117.  
  118. }
  119.  
  120. return super.onOptionsItemSelected(item);
  121.  
  122. }

转载请注明出处:http://blog.csdn.net/fth826595345/article/details/9199393

android开发之res下的menu (xml+代码的形式)的更多相关文章

  1. android开发之Animations的使用(二)

    android开发之Animations的使用(二) 本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提 ...

  2. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  3. Android开发之PopupWindow

      /* *  Android开发之PopupWindow * *  Created on: 2011-8-8 *  Author: blueeagle *  Email: liujiaxiang@g ...

  4. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  5. Android开发之旅4:应用程序基础及组件

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

  6. Android开发之旅2:HelloWorld项目的目录结构

    引言 前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Androi ...

  7. android开发之Animation(五)

    android开发之Animation的使用(五) 本博文主要讲述的是Animation中的AnimationLisenter的用法,以及此类的一些生命周期函数的调用,代码实比例如以下: MainAc ...

  8. Android开发之Android Material Design Toolbar自定义随笔

    一.自定义Toolbar的menu: 在menu下新建menu.xml文件,自定义menu的样式: <menu xmlns:android="http://schemas.androi ...

  9. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

随机推荐

  1. AngularJs + ASP.NET MVC

    [AngularJs + ASP.NET MVC]使用AntularJs快速建立ASP.NET MVC SPA網站 這幾天接觸到了AngularJs的美麗,讓饅頭有點躍躍欲試使用AngularJs來做 ...

  2. OpenGL入门【1 高速入门】

    // OpenGL.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include &l ...

  3. 初探Django线程发送邮件

    最近一直在纠结一个邮件发送的问题. 在本地Linux下搭建程序,不填写EMAIL设置就可以成功发送邮件,在远端的云服务器下的Linux环境就发送不了.在windows下搭建的程序也不能发送注册邮件,很 ...

  4. 数以百万计美元的融资YO是什么东东?

    给自己做个广告哈,新栏目"面试"已经推出,回复"面试"就可以获取. 这两天最火的应用是什么.非yo莫属,堪称史上最简单的社交应用,仅仅能向好友发送一个yo. 出 ...

  5. 使用OpenWrt的SDK

    原文:http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk 为什么要使用SDK: Reasons for using the SDK are: C ...

  6. sql 事务日志传输

    原文:sql 事务日志传输 概述 可以使用日志传送将事务日志不间断地从一个数据库(主数据库)发送到另一个数据库(辅助数据库).不间断地备份主数据库中的事务日志,然后将它们复制并还原到辅助数据库,这将使 ...

  7. C#发送邮件三种方法(Localhost,SMTP,SSL-SMTP)

    原文:C#发送邮件三种方法(Localhost,SMTP,SSL-SMTP) 最近公司由于一个R&I项目的需要,用户要求在购买产品或出货等一些环节,需要发送邮件提醒或者说每周一让系统自动采集数 ...

  8. HPQC HP Quality Center windows 服务

    HPQC HP Quality Center windows 服务已经启动的话,就不用运行run.bat 两个是一样的效果.

  9. WXPP QuickFramework V2.0

    微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github   用了一个多星期的时间,把微信快速开发框架进行了改进,之前1.0版本针对的是普通订阅号,V2. ...

  10. Fitnesse集成TestLink

    TestLink作为开源测试管理工具,可以进行测试工程.测试计划以及执行计划的管理,而且TestLink团队提供了XML-PRC的接口供第三方工具调用,接口支持程度也比较好. Fitnesse作为开源 ...