Android的菜单分为三种类型:选项菜单(Option Menu)、上下文菜单(Context Menu)、子菜单(Sub Menu)。

一、选项菜单

  用户点击设备上的菜单按钮(Menu),触发事件弹出的就是选项菜单。选项菜单最多只有六个,超过六个第六个就会自动显示为“更多”选项,点击后以弹出的方式来展示。

  Menu的add方法可以添加一个菜单项,API里列出了四种add重载形式,最多的一个有四个参数:

  private MenuItem add(int groupId,int itemId,int order,CharSequence title);

  private MenuItem add(inte groupId,int itemId,int order,int titleRes);

  • groupId:菜单项的分组Id标识,为整数。将菜单的选项进行分组,这样就把相似功能的菜单项分为同一组,然后可以通过调用setGroupCheckable,setGroupEnabled,setGroupVisible来设置菜单属性,而无需单独设置。
  • itemId:当前菜单项的Id标识,为整数。
  • order:菜单显示顺序标识,按升序从左到右、从上到下进行显示。为0和正整数,不能为负数。
  • title或titleRes:每个菜单项的标题。

  创建方法:

  1.覆写Activity的onCreateOptionsMenu(Menu menu)方法,当我们第一次打开菜单时调用且只调用一次。

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

  3.当菜单项(MenuItem)被选中时,覆写Activity的onOptionsItemSelected()方法响应事件。

二、上下文菜单

  当用户长按View(如Button、EditText、TextView等)时弹出的菜单就是上下文菜单,上下文菜单必须注册到指定的View上才能显示。举个例子:当我们在编辑短信的时候,长按2s短信编辑框(就是个EditText)就会弹出一个菜单,比如有“复制”、“粘帖”、“输入法”等选项,这个弹出的菜单就是上下文菜单。

  我们还可通过setHeaderTitle()以及setHeaderIcon()方法为上下文菜单设置标题栏标题以及图标。

  创建方法:

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

  2.调用registerForContextMenu()方法,为VIew注册上下文菜单

  3.覆写onContextItemSelected()方法,响应菜单单击事件

三、子菜单

  子菜单就是将相似功能的分组进行多级显示的一种菜单,例如:windows的“新建”菜单就包括“新建文件夹”、“新建快捷方式”、“新建文本文档”等子菜单。

  创建方法:

  1.覆写Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法添加选项菜单(Option Menu),但是此选项菜单包含下一级的子菜单。

  子菜单中不能像选项菜单一样给每一个MenuItem设置图片,只能在子菜单的顶部显示图像。 

  @Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
menu.add(0,1,1,"菜单1");
SubMenu file=menu.addSubMenu(0, 2, 2, "文件");
         file.setHeaderTitle("我的文件");//设置子菜单的标题栏标题
         file.setHeaderIcon(android.R.drawable.***);//设置子菜单标题栏图标
MenuItem open=file.add(0, 3,3, "打开");
open.setCheckable(true);
open.setChecked(true);
MenuItem fileNew=file.add(1,4,4,"新建");
fileNew.setChecked(true);
file.add(1, 4, 4,"删除");
file.setGroupCheckable(1, true, true);//将groupId为1的MenuItem设置为选项按钮类型
return true;
}

  当点击设备上的Menu按钮后,会在屏幕下方弹出两个选项菜单:“菜单1”和“文件”,然后再单击“文件”时,就会在屏幕中间弹出标题为“我的文件”的子菜单窗口。
  2.调用SubMenu的add()方法,添加子菜单项

  3.调用onCreateItemSelected()方法,响应菜单单击事件

四、Activity有三种响应菜单项单击事件的方法:

  这里没有弄明白,以后用到再看。

Android三种菜单简介的更多相关文章

  1. Android 三种菜单(Menu)的实现

    感谢大佬:https://blog.csdn.net/chileme/article/details/82944764 一.常用方法 java onCreateOptionsMenu(Menu men ...

  2. Android三种菜单的使用方式

    一.选项菜单(OptionMenu) 在res目录下新建menu目录,用于放置菜单布局文件(右键res->new->Android Resource Directory->menu) ...

  3. Android三种基本的加载网络图片方式(转)

    Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...

  4. Android三种左右滑动效果 手势识别

    Android三种左右滑动效果 手势识别(转)   手势识别 1.onCreate中添加GestureDetector mGestureDetector; //监听手势事件 mGestureDetec ...

  5. Android_三种菜单介绍

    Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Menu).子菜单(Sub Menu) 一.选项菜单 当用户单击设备上的菜单按钮(Menu),触发事件 ...

  6. android 三种定位方式

    http://www.cnblogs.com/oudi/archive/2012/03/22/2411509.html 最近在看android关于定位的方式,查了很多资料,也做了相关实验,在手机上做了 ...

  7. Android三种实现自定义ProgressBar的方式介绍

    一.通过动画实现 定义res/anim/loading.xml如下: View Row Code<?xml version="1.0" encoding="UTF- ...

  8. Android 三种方式实现自定义圆形进度条ProgressBar

    一.通过动画实现 定义res/anim/loading.xml如下: <?xml version="1.0" encoding="UTF-8"?> ...

  9. Selenium自动化测试脚本中三种等待时间简介

    为了提高脚本的稳定性,我们需要在脚本中增加等待时间 第一种:强制等待 Thread.sleep():固定休眠时间设置,Java的Thread类里提供了休眠方法sleep,导入包后就能使用 sleep( ...

随机推荐

  1. Linux学习笔记24——进程管道

    一 管道的作用 通常把一个进程的输出通过管道连接到另一个进程的输入. 二 popen和pclose函数 #include <stdio.h> FILE *popen(const char ...

  2. c语言运算符号详细说明

    C语言中具有右结合性的运算符包括所有单目运算符以及赋值运算符(=)和条件运算符.其它都是左结合性. 判断表达式计算顺序时,先按优先级高的先计算,优先级低的后计算,当优先级相同时再按结合性,或从左至右顺 ...

  3. 高性能I/O设计模式Reactor和Proactor

    系统I/O 可分为阻塞型, 非阻塞同步型,非阻塞异步型. (Linux对aio支持的不完整,所以linux上用Reactor比较多:Proactor需要系统API支持真正的“异步”) 阻塞型I/O意味 ...

  4. CentOS7.0分布式安装HADOOP 2.6.0笔记-转载的

    三台虚拟机,IP地址通过路由器静态DHCP分配 (这样就无需设置host了). 三台机器信息如下 -      1. hadoop-a: 192.168.0.20  #master     2. ha ...

  5. PHP用ajia代码写三级联动下拉

    下面是我做三级联动下拉的步骤以及逻辑 第一步:先做一个省市区表格 第二步:建个PHP页面显示用我是在<body>里放<div>用来接收要显示的省市区表格信息,里面嵌入jquer ...

  6. 不区分大小写的in_array实现 thinkphp框架

    // 不区分大小写的in_array实现 function in_array_case($value,$array) { return in_array(strtolower($value),arra ...

  7. Linq to Object实现分页获取数据

    最后调用的CSharp代码可以是: int totalcount = dboperator.Customers.Count(); //总记录数 int pagesize = 100;//每页显示数 / ...

  8. HUNNU--湖师大--11409--Skill

    Skill Yasser is an Egyptian coach; he will be organizing a training camp in Jordan. At the end of ca ...

  9. 浏览器中JavaScript执行原理

    本章我们讨论javascript在浏览器中是如果工作的,包括:下载.解析.执行的全过程.javascript的这些讨人嫌的地方我们是知道的: i.需要串行下载 ii.需要解析 iii.需要串行执行 而 ...

  10. iOS Multiview Applications

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...