在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. RequireJS 参考文章

    入门: http://www.cnblogs.com/snandy/archive/2012/05/22/2513652.html http://www.cnblogs.com/snandy/arch ...

  2. XML中PCDATA与CDATA的区别

    XML中PCDATA与CDATA的区别 2011-02-10 19:27:25|  分类: XML |  标签:xml中pcdata与cdata的区别     字号:大中小 订阅 所有 XML 文档中 ...

  3. eclipse maven 报错Could not get the value for parameter encoding for plugin execution default

    问题描述:更改默认的maven仓库路径完成后.即存maven项目或者新建maven项目的时候出现如下错误 Could not get the value for parameter encoding ...

  4. Oracle设置为自启动

    Oracle设置为自启动 学习了:http://blog.itpub.net/31015730/viewspace-2148412/ oracle自带dbstart命令,主要进行系统启动设置: 在/e ...

  5. FM遇到错误RQP-DEF-0354和QE-DEF-0144

    版本:Cognos 10.2.1 系统:Win10 操作过程:在FM调用了一个存储过程,其中引用了前端page页面的参数如下图所示,在验证和保存查询主题的时候一直提示参数没有替换值,错误 信息如下图所 ...

  6. GG配置ggmgr进程

    Oracle配置mgr进程 edit params mgr port 7809 syslog none dynamicportlist 7810-7820 自己主动会生成./dirprm/mgr.pr ...

  7. Python面向对象编程 - 一个记事本程序范例(二)

    给程序加上控制台菜单 menu.py import sys from notebook import Notebook, Note class Menu: '''Display a menu and ...

  8. svg translate 操作

    function dragElement(evt) { var target = evt.target; var id = target.id; var dx = evt.dx, dy = evt.d ...

  9. Android Service完全解析,关于服务你所需知道的一切(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

  10. poj 2486 Apple Tree (树形背包dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: poj-2486 题意 给一个n个节点的树,节点编号为1~n, 根节点为1, 每个节点有一个权值.    从 ...