在Android系统中,菜单可以分为三类:选项菜单(Option Menu),上下文菜单(Context Menu)以及子菜单(Sub Menu)。

一.选项菜单(Option Menu)

创建选项菜单的步骤:

1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用

2.调用Menu的add( )方法添加菜单项(MenuItem),同时可以调用MenuItem的setIcon( )方法来为菜单项设置图标

3.当菜单项(MenuItem)被选择时,覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件

选项菜单的实例:

  1. package com.android.menu.activity;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.Menu;
  5. import android.view.MenuItem;
  6. public class OptionMenuActivity extends Activity {
  7. //声明菜单项常量
  8. private static final int ITEM_1 = Menu.FIRST;
  9. private static final int ITEM_2 = Menu.FIRST+1;
  10. private static final int ITEM_3 = Menu.FIRST+2;
  11. public void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.main);
  14. }
  15. //覆盖onCreateOptionsMenu(Menu menu)来添加菜单项
  16. public boolean onCreateOptionsMenu(Menu menu) {
  17. //android.R使用的是系统自带的图标
  18. menu.add(0, ITEM_1, 0, "开始").setIcon(android.R.drawable.ic_media_play);
  19. menu.add(0, ITEM_2, 0, "帮助").setIcon(android.R.drawable.ic_menu_help);
  20. menu.add(0, ITEM_3, 0, "退出").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
  21. return true;
  22. }
  23. //覆盖onOptionsItemSelected(MenuItem item)来响应菜单选项被单击事件
  24. public boolean onOptionsItemSelected(MenuItem item) {
  25. switch (item.getItemId()) {
  26. case ITEM_1:
  27. setTitle("开始游戏!");
  28. break;
  29. case ITEM_2:
  30. setTitle("查看帮助!");
  31. break;
  32. case ITEM_3:
  33. setTitle("退出游戏!");
  34. break;
  35. }
  36. return true;
  37. }
  38. }

效果图:

二.上下文菜单(Context Menu)

创建上下文菜单的步骤:

1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,调用Menu的add( )方法添加菜单项(MenuItem).

2.覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件

3.调用registerForContextMenu( )方法来为视图注册上下文菜单

上下文菜单的实例(按住“测试Context Menu”2秒,就会出现上下文菜单):

  1. package com.android.context.activity;
  2. import android.app.Activity;
  3. import android.graphics.Color;
  4. import android.os.Bundle;
  5. import android.view.ContextMenu;
  6. import android.view.Menu;
  7. import android.view.MenuItem;
  8. import android.view.View;
  9. import android.view.ContextMenu.ContextMenuInfo;
  10. import android.widget.TextView;
  11. public class ContextMenuActivity extends Activity {
  12. private static final int ITME_1 = Menu.FIRST;
  13. private static final int ITME_2 = Menu.FIRST+1;
  14. private static final int ITME_3 = Menu.FIRST+2;
  15. private TextView text;
  16. public void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. text = (TextView)findViewById(R.id.TextView_1);
  20. //调用registerForContextMenu()来注册上下文菜单
  21. registerForContextMenu(text);
  22. }
  23. @Override
  24. public void onCreateContextMenu(ContextMenu menu, View v,
  25. ContextMenuInfo menuInfo) {
  26. menu.add(0, ITME_1, 0, "红色背景");
  27. menu.add(0, ITME_2, 0, "蓝色背景");
  28. menu.add(0, ITME_3, 0, "白色背景");
  29. }
  30. @Override
  31. public boolean onContextItemSelected(MenuItem item) {
  32. switch (item.getItemId()) {
  33. case ITME_1:
  34. //设置TextView的背景颜色
  35. text.setBackgroundColor(Color.RED);
  36. break;
  37. case ITME_2:
  38. text.setBackgroundColor(Color.BLUE);
  39. break;
  40. case ITME_3:
  41. text.setBackgroundColor(Color.WHITE);
  42. break;
  43. }
  44. return true;
  45. }
  46. }

效果图:

三.子菜单(Sub Menu)

创建子菜单的步骤:

1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,调用Menu的addSubMenu( )方法来添加子菜单(Sub Menu)

2.调用SubMenu的add( )方法来添加子菜单(Sub Menu)

3.覆盖onContextItemSelect( )方法来响应菜单单击事件

子菜单的实例:

  1. package com.android.sub.activity;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.Menu;
  5. import android.view.MenuItem;
  6. import android.view.SubMenu;
  7. public class SubMenuActivity extends Activity {
  8. private static final int ITEM_1 = Menu.FIRST;
  9. private static final int ITEM_2 = Menu.FIRST+1;
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.main);
  13. }
  14. //覆盖onCreateOptionsMenu(Menu menu)方法,添加子菜单项
  15. public boolean onCreateOptionsMenu(Menu menu) {
  16. SubMenu ad = menu.addSubMenu("添加").setIcon(android.R.drawable.ic_menu_add);
  17. SubMenu re = menu.addSubMenu("关闭").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
  18. ad.add(0, ITEM_1, 0, "文件");
  19. ad.add(0, ITEM_2, 0, "图片");
  20. return true;
  21. }
  22. //覆盖onOptionsItemSelected(MenuItem item),响应菜单选项被单击事件
  23. public boolean onOptionsItemSelected(MenuItem item) {
  24. switch (item.getItemId()) {
  25. case ITEM_1:
  26. setTitle("添加文件!");
  27. break;
  28. case ITEM_2:
  29. setTitle("添加图片!");
  30. break;
  31. }
  32. return true;
  33. }
  34. }

效果图:

注:menu.add的方法中的参数:

1.int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。可以用到的方法有:
removeGroup(id)
setGroupCheckable(id, checkable, exclusive)
setGroupEnabled(id,boolean enabled)
setGroupVisible(id,visible)
2.int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个Menu中的选项。在后面使用菜单的时候,就是靠这个item ID来判断,你选中的是哪个选项。
3.int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的顺序来显示。
4.String类型的title参数,表示选项中显示的文字。

Android开发学习之3大类菜单的更多相关文章

  1. Android开发学习总结(一)——搭建最新版本的Android开发环境

    Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...

  2. Android开发学习路线的七个阶段和步骤

    Android开发学习路线的七个阶段和步骤           Android学习参考路线     第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和St ...

  3. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  4. Android开发学习路线图

    Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...

  5. Android开发学习之LauncherActivity开发启动的列表

    Android开发学习之LauncherActivity开发启动的列表 创建项目:OtherActivity 项目运行结果:   建立主Activity:OtherActivity.java [jav ...

  6. Android开发学习必备的java知识

    Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...

  7. Android开发学习之路--Android Studio cmake编译ffmpeg

      最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...

  8. Android开发学习之路--网络编程之xml、json

    一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...

  9. Android开发学习之路--Android系统架构初探

    环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...

随机推荐

  1. spark调优经验(待续)

    spark调优是须要依据业务须要调整的,并非说某个设置是一成不变的,就比方机器学习一样,是在不断的调试中找出当前业务下更优的调优配置.以下零碎的总结了一些我的调优笔记. spark 存储的时候存在严重 ...

  2. fpga状态机详解

    什么是状态机:状态机通过不同的状态迁移来完成特定的逻辑操作 状态机的分类:Moore型状态机和Mealy型状态机 Moore型:状态机的变化只与当前的状态有关 Mealy型:状态机的变化不仅与当前的状 ...

  3. 10个最好的 jQuery 视频插件

    在这篇文章中已经收集了10个最佳的jQuery视频插件,帮助开发人员容易地实现网站播放影片功能.可以显示视频和视频播放列表. 1. Bigvideo.js BigVideo.js 是一个jQuery插 ...

  4. (转)Unity中武器与人物的碰撞检测

    自:http://blog.csdn.net/Monzart7an/article/details/24435843 目前来说有三种思路,其实前两种算变种了: 1.动画关键帧回调 + 范围检测. 这个 ...

  5. COM如何区分套间线程(apartment thread)和自由线程(free thread)

     

  6. System.ComponentModel.Component : MarshalByRefObject, IComponent, IDisposable

    #region 程序集 System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Windows\ ...

  7. [Bash] Create Aliases in .bash_profile for Common Bash Commands

    .bash_profile is a file that bash invokes (or more technically sources) before the start of a new ba ...

  8. VMware Workstation 12下载安装与激活图文教程

    一.简介: VMware Workstation 12专门为Win10的安装和使用做了优化,支持DX10.4K高分辨率显示屏.OpenGL 3.3.7.1声道,以及各种新硬件和新技术.从vm11版本开 ...

  9. STL 源代码剖析 算法 stl_algo.h -- partial_sort / partial_sort_copy

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie partial_sort / partial_sort_copy ------------- ...

  10. Openerp 7.0 附件存储位置

    我们知道对OpenERP中的每个内部对象(比如:业务伙伴,采购订单,销售订单,发货单,等等)我们都可以添加任意的附件,如图片,文档,视频等.那么这些附件在OpenERP内部是如何管理的呢? 默认情况下 ...