在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. OpenCV学习(26) 直方图(3)

    本章中我们学习一下通过backproject直方图,得到一副图像中每个像素属于该直方图的概率.在下边原始图中(左图),我们框选了一块四边形的区域,计算该区域的灰度直方图,然后通过下面的函数calcBa ...

  2. 混沌数学之Kent模型

    相关软件:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/view/7c6f4a000740be1e650e9a75.html // 肯特映射 clas ...

  3. OTL翻译(1) -- 说明

    说明 该文档说明的是4.0版本的ORACLE/ODBC和DB2-CLI模板库(OTL).OTL4.0(后面简称OTL)模板库是基于C++的模板的. OTL4.0是组合了C++的模板框架和OTL适配器. ...

  4. mysql必知必会(三、使用mysql)

    一.连接mysql数据库 mysql -u 用户名 -p回车输入密码 二.显示所有的数据库 show databases; 三.使用数据库 use 数据库名; 四.显示所有的表 show tables ...

  5. Valid Parentheses leetcode java

    题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the ...

  6. jQuery用面向对象的思想来编写验证表单的插件

    本人的重点是怎么构建一个简单有效可扩展的jQuery表单验证插件,这篇文章没有教你怎么用 validate plugin.我们的重点在学习一些jQuery,Javascript面向对象编程的知识. 下 ...

  7. Jquery中parent()和parents()

    一.parent()方法 此方法取得匹配元素集合中每个元素的紧邻父元素,也就是第一级父元素,而不是所有的祖先元素.所取得的父元素集合也可以使用表达式进行筛选. 二.parents()方法 此方法取得一 ...

  8. Nuget出现错误怎么办?

        Go to the packages folder in the Windows Explorer and delete it. Open Visual Studio and Go to To ...

  9. android 时间与String的相互转化

    :大体思路 [html] view plaincopy 这种转换要用到java.text.SimpleDateFormat类 字符串转换成日期类型: 方法1: 也是最简单的方法 Date date=n ...

  10. C++生成十字绣图案(二) 面向对象

    基本的十字绣线性生成中提供了判断下一步可以画的位置并且逐步生成的函数.以这些基本函数为基础,可以进行更多变化的图案设计. 为了方便的扩展,可以把线性生成写成一个类,以后的修改继承这个类. 头文件Bas ...