【转】 Pro Android学习笔记(三一):Menu(2):扩展、图片、子菜单
菜单扩展
如果菜单项很多,超过六个时,就会采用菜单扩展模式。在例子中我加入了10个菜单项,预计能进入菜单扩展模式,但是实际效果如右图所示。效果和list非常相似,如果继续增加菜单项,可以通过上下拖动,来查看未能显示在屏幕上的菜单项。对于list模式,不能在菜单项中加入图标,也影响了我们下一步试验。
对于Android 4.0,系统缺省的UI风格有所变化,如果我们仍希望采用原有的显示方式,可以通过为Activity设置theme,指定风格,经过测试,Theme以及Theme.Light均可以使用旧的菜单风格,而Theme.Holo不行。如下:
<activity android:name=".MoreMenuTest" android:label="@string/moreMenuTest"
android:theme="@android:style/Theme.Light" />
通过指定theme,我们可以实现所期望的带有扩展的菜单风格。按了带有三角符号的“More”后,按list风格显示余下的菜单项。

需要特别提醒的是。【1】对于items.setCheckable(true);或者对整个Group进行setGroupCheckable(),只在list风格的menu中有显示效,在网格风格中无显示效。在网格的theme中,即便我们只有1个item,仍不能显示选中框,但是如果我们去询问isCheckable(),或者isChecked(),仍可以得到true和是否选中的状态,只是不能在UI上显示所期望的风格。【2】对于在menu item中增加图片,在网格风格中有效,而在list风格中无效不显示。
菜单项加入图片

在菜单中添加图片很简单。前面已经提到,不能在list风格的菜单中显示。图片是不进行伸缩处理,而是按原尺寸在网格中显示。右图是两个不同尺寸的图片显示情况,第一个图由于图片大,菜单的title没能显示出来。在商用应用中,我们应在drawable-??dpi/中放入不同尺寸的图片,以保证能够适配不同屏幕尺寸。代码很简单,如下:
item = menu.add( ...... );
item.setIcon(R.drawable.clock /*资源ID*/);
子菜单
SubMenu是Menu的继承项目。我们在上面小例子的最前的位置将如一个子菜单,代码如下:
private void subMenuTest(Menu menu){
//addSubMenu()的参数和addMenu一样。要将子菜单放在第一位子,就需要第三个参数orderId为最小,所以我们在设置菜单时,有时需要留有余地,或者偏移量为自定义,即便设置static int MENU_BASE = Menu.FIRST,这样以后需要调整时比较方便。
SubMenu subMenu = menu.addSubMenu(SUBMENU_BASE, SUBMENU_BASE +1, Menu.FIRST + 10, "Sub Menu");
//测试:子菜单项可以加入icon。从图上我们看到,子菜单的呈现是list方式,也就是说在子菜单的菜单项中无法体现图片效果。
subMenu.setIcon(R.drawable.leaf);
//子菜单是菜单的子类,所以增加菜单项方式一样
subMenu.add(SUBMENU_BASE, SUBMENU_BASE +1, SUBMENU_BASE +1,"Sub.1");
subMenu.add(SUBMENU_BASE, SUBMENU_BASE +2, SUBMENU_BASE +2,"Sub.2");
subMenu.add(SUBMENU_BASE, SUBMENU_BASE +3, SUBMENU_BASE +3,"Sub.3");
//SubMenu是Menu的子类,所以SubMenu中也可以有SubMenu,下面测试这种情况。由于只是简单测试,只填入title。在《Pro Android 4.0》一书中说不能在子菜单中加入子菜单,但是测试时发现可以,至少在Android 4.2上正常。如果不填入GroupId,itemId,orderId,则它们缺省都为Menu.NONE。
SubMenu subsub = subMenu.addSubMenu("subInSub");
subsub.add("sub.sub.1");
subsub.add("sub.sub.2");
}

效果如图。由于子菜单点击后是list风格呈现,这说明在子菜单中加入图片是无显示效果。
本博文涉及的例子代码,可以在Pro Android学习:Menu中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(三一):Menu(2):扩展、图片、子菜单的更多相关文章
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
随机推荐
- activiti基础--0------------------------------生成23张表
1.工作流activiti.cfg.xml配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xm ...
- 使用 Python 为 KVM 编写脚本,第 1 部分: libvirt
虚拟化是目前市场上大多数服务器操作系统的标准设备.在 Linux® 的世界里,服务器虚拟化有两个主要选择:基于 Kernel 的虚拟机 (KVM) 和 Xen.KVM 是 Red Hat 和其他公司采 ...
- 禁用chrome浏览器的cookie
Chrome: 1.打开chrome浏览器,点击右上角的“自定义和控制Google Chrome”按钮 2.在下拉菜单中选择设置 3.点击设置页底部的“显示高级设置...” 4.在隐私设置下,点击“内 ...
- LeetCode:加油站【134】
LeetCode:加油站[134] 题目描述 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要 ...
- ZOJ - 3705 Applications 【模拟】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3705 题意 给出N个队员 然后一个教练要从中选择 M名队员 要选 ...
- JS一些碎知识点
一些js基本知识点 Doctype 浏览器渲染模式 渲染模式发展历史 在多年以前(IE6诞生以前),各浏览器都处于各自比较封闭的发展中(基本没有兼容性可谈).随着WEB的发展,兼容性问题的解决越来越显 ...
- [原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Struts2 遇到的问题汇总
1.报错如下信息: org.apache.jasper.JasperException: The Struts dispatcher cannot be found. This is usually ...
- sqoop job 增量导入
使用sqoop job做增量导入 在执行导入模式为 incremental 的sqoop job 时,sqoop会获取上次导入操作的 –check-column的value值,也就是说使用sqoop ...
- 模拟RPG格斗
三个英雄角色参与PK 每个英雄具有以下几个属性:生命值(为0时英雄倒下).攻击力(每次攻击时扣除对方的生命值点数).攻击间隔(每次攻击过后都要等待间隔时间才能进行下次攻击,首次攻击之前也要先等待间隔时 ...