在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. 数据库实例: STOREBOOK > 用户

    ylbtech-Oracle:数据库实例: STOREBOOK  >  用户 用户 1.返回顶部 1.1, 1.2, 2. 用户列表(用户状态=OPEN)返回顶部 2.1, DBSNMP 2.2 ...

  2. 解决:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面

    错误重现: 在发布网站的过程中,虽然不是第一次发布了,但是还是遇到了很多的问题.为了以后可以轻松解决此类问题还是积累下来比较好. 问题:HTTP 错误 404.2 - Not Found. 由于 We ...

  3. VB.NET与C# 语法区别展示

    在学习VB.NET后发现,VB.NET与C#的语法主要的不同在两个部分,这两部分搞通了,那就游刃有余,迎刃而解了.现将其对比总结如下: 一.实体部分 (与VB相比,在C#和VB.NET中,实体的使用很 ...

  4. 我对REST的理解

    1:rest的由来 REST即表述性状态传递(英文:Representational State Transfer,简称REST) 通俗点说:资源在网络中以某种表现形式进行状态转移. 源于REST之父 ...

  5. Node.js程序在node-windows中不能运行

      Node.js程序部分功能在命令行中运行良好,但在node-windows中不能运行,怎么回事? 答:路径问题. 请看如下的描述: My script runs fine on it's own, ...

  6. Navicat安装激活

    有条件的同学麻烦不要使用下面的激活步骤,仅供个人学习使用 ...... ...... ...... ...... 一.去官网下载最新Navicat软件https://www.navicat.com.c ...

  7. ZH奶酪:Linux新建用户+远程登录

    7.想在VBUbuntu中新建一个账户,但是用useradd命令发现没有权限,原来Ubuntu默认不是root权限登录,需要按照下边的教程才能新建用户. http://www.linuxidc.com ...

  8. android google map v1 v2 v3 参考

    V1,V2已经不被推荐使用,谷歌强烈推荐使用V3. 本人在选择时着实纠结了良久,现在总结如下: 对于V1,现在已经申请不到API KEY了,所以不要使用这个版本.这个是网址:https://devel ...

  9. Linux下串口操作之数据拼接

    串口操作中,特别以非阻塞的方式读取和发送数据,做好进程之间的同步很重要.有时我们会发现这样一个问题,在进行read操作时,一次read不能获得一个完整的数据帧,这就好比你买了一个电脑,送货的先把显示器 ...

  10. uni-app - Class 与 Style 绑定

    参考uni文档:https://uniapp.dcloud.io/use?id=class-%E4%B8%8E-style-%E7%BB%91%E5%AE%9A 参考vue文档:https://cn. ...