在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. 使用DBCA工具创建自己的数据库

    ylbtech-Oracle:使用DBCA工具创建自己的数据库  DBCA创建数据库 默认安装的Oracle数据库一般不能满足实际应用的需求,例如数据库名称.数据库块的大小等都需要修改,那么我们应该自 ...

  2. 数学图形之将曲线(curve)转化成曲面管

    在我关于数学图形的博客中,一开始讲曲线的生成算法.然后在最近的章节中介绍了圆环,还介绍了螺旋管以及海螺的生成算法.一类是曲线,一类是环面,为什么不将曲线变成环的图形,毕竟曲线看上去太单薄了,这一节我将 ...

  3. utf-8-validation

    https://leetcode.com/problems/utf-8-validation/ public class Solution { public boolean validUtf8(int ...

  4. Ubuntu Linux自动发邮件配置及邮件发送脚本

    测试环境:Ubuntu 11.10 1. 安装mutt及msmtp软件 sudo apt-get install mutt sudo apt-get install msmtp 2. 编辑配置文件vi ...

  5. mongoDB报错Cannot find module '../build/Release/bson'

    打算用nodejs写一个blog系统,发现nodejs还是存在很多的坑.在使用mongodb时遇到如下报错问题: { [Error: Cannot find module '../build/Rele ...

  6. 日程管理app

    背景: 普通的笔记本显然具有保存占用较大空间的弊端.而笔记类app又借助于虚拟按键输入,便利度稍逊.假设使用电脑,又产生了较大空间的弊端. 手段: 成熟的书写识别技术 方法: 一.专有的划分有制定格子 ...

  7. 五条强化 SSH 安全的建议

    当你查看你的 SSH 服务日志,可能你会发现充斥着一些不怀好意的尝试性登录.这里有 5 条常规建议(和一些个别特殊策略)可以让你的 OpenSSH 会话更加安全. 强化密码登录 密码登录很方便,因为你 ...

  8. 使用grep进行文本查找

    命令模式: grep "文本" -rl 路径 例子: grep "w3.the.abc.com" -rl /home/hy/fluent3 有时候需要排除掉一些 ...

  9. STL - 容器 - List

    List内部结构完全不同于array, vector, deque. 它提供了两个pointer,指向第一个和最后一个元素. 不支持随机访问元素,因此要访问第n个元素必须爬过n - 1个元素. 在任何 ...

  10. Java从零开始学三十九(对象序列化)

    一.序列化 将对象的状态存储到特定存储介质中的过程 对象序列化,就是把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便的实现对象的传输或存储.   序列化保存对象的“全景图”,构建对象的“ ...