Android学习笔记(34):Android菜单-阿里云开发者社区

开发者社区> 张晓灿> 正文

Android学习笔记(34):Android菜单

简介:
+关注继续查看

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

选项菜单(Option Menu):按设备上的菜单按钮(Menu)会出现的菜单。不支持勾选标记。

上下文菜单(Context Menu):长按某个组件会出现的菜单。不支持菜单项图标。

子菜单(SubMenu):就是子菜单。不支持菜单项图标,不支持嵌套子菜单。

 

Menu类用于添加菜单项和子菜单的方法是add()addSubMenu()

MenuItem add(CharSequence title):添加一个菜单项

MenuItem add(int groupId, int itemId, int order, int titleRes):添加一个处于groudId组的菜单项

MenuItem add(int titleRes):添加一个菜单项

MenuItem add(int groupId, int itemId, int order, CharSequence title):添加一个处于groudId组的菜单项

SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title):添加一个处于groudId组的子菜单

SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes):添加一个处于groudId组的子菜单

SubMenu addSubMenu(CharSequence title):添加一个子菜单

SubMenu addSubMenu(int titleRes):添加一个子菜单

 

 

1)选项菜单的创建方法:

1、重写ActivityonCreateOptionsMenu(Menu menu)方法。

2、调用Menuadd()方法添加菜单项(MenuItem),可以调用MenuItemsetIcon()方法为菜单项设置图标。

3、重写AcitivyonOptionsMenuSelected()方法为菜单设置事件监听。

 

2)子菜单的创建方法:

1、重写ActivityonCreateOptionsMenu()方法,调用MenuaddSubMenu()方法添加子菜单。

2、调用SubMenuadd()方法,添加子菜单项。

3、重写onCreateItemSelected()方法,为菜单设置监听事件。

 

SubMenu类还提供了额外的方法来设置菜单头的信息:

SubMenu setHeaderIcon(Drawable icon):设置菜单头的图标。

SubMenu setHeaderIcon(int iconRes):设置菜单头的图标。

SubMenu setHeaderTitle(CharSequence title):设置菜单头的标题。

SubMenu setHeaderTitle(int titleRes):设置菜单头的标题。

SubMenu setHeaderView(View view):使用View组件设置菜单头。

 

(3)上下文菜单的创建方法:

1、重写ActivityonCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo)方法,View参数设置的是触发上下文菜单的组件。

2、调用Menuadd()方法添加菜单项MenuItem

3、重写onContextItemSelected()方法,为上下文菜单设置事件监听。

4、调用registerForContextMenu(View)方法,为View组件注册上下文菜单。

同样我们可以用setHeaderIcon()setHeaderTitle()方法为上下文菜单设置图标、标题。

 

4)为菜单项设置事件监听:

我们重写ActivityonCreateItemSelected()方法来设置事件监听,一般我们用switch方法判断是哪个菜单项被单击,所以我们需要为每个菜单项设置一个id,以方便判断。

当然我们还有另一个方法就,就是为每个菜单项绑定监听器,用setOnMenuItemClickListener()方法,但这样做是很麻烦的,不推荐。

5)设置单选菜单项和多选菜单项:

setCheckable(boolean checkable):设置该菜单项可否被勾选。

setGroupCheckable(int group,boolean checkable,boolean exclusive):设置group组的菜单项是否可以被勾选,如果exclu设置为true,那么该组为单选菜单项。

 

6)为菜单项设置快捷键(现在好像没什么用了):

setAlphabeticShortcut(char alphaChar):设置字母快捷键。

setNumericShortcut(char numericChar):设置数字快捷键。

setShortcut(char numericChar, char alphaChar):同时设置两种快捷键。

 

7)设置与Activity关联的菜单项:

用于单击某个菜单项时可以跳转到其他Activity

setIntent(Intent intent)方法。

 

8)使用XML文件创建菜单:

创建方法是

1.在res文件下面的menu文件目录下创建菜单的xml文件。

2.在ActivityonCreateOptionsMenu()方法或onCreateContextMenu()方法中用inflate(int menuRes, Menu menu)方法加载对应资源。

3.重写Activity相关的事件监听方法。

 

menu文件夹下的xml有如下的规则:

1.根元素是<menu.../>,没有多余的属性。

2.<group.../>将多个菜单项<item.../>包装成一个菜单组。

可以设置如下属性:

checkableBehavior:菜单项额选择行为,none(不可选)、all(多选)、single(单选)。

menuCategory:指定菜单项的优先级,containersystemsecondaryalternative

visible:是否可见

enable:是否可用

3.<item.../>用于定义菜单项,内部可包含<menu.../>,就成了子菜单。

可以设置的属性如下:

android:id:设置ID

android:title:设置标题

android:icon:设置图标

android:alphabeticShortcut:设置字母快捷键

android:numbericShortcut:设置数字快捷键

android:checkable:是否可选

android:checked:是否选中

android:visible:是否可见

android:enable:是否可用

 

(9)弹出式菜单PopupMenu

创建步骤如下:

1、new PopupMenu(Context context,View anchor)创建弹出式菜单,anchor参数表示触发菜单的组件。

2、调用MenuInflaterinflate()方法加载菜单资源。

3、调用PopupMenushow()方法显示弹出式菜单。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
计算机基础3 | 学习笔记
快速学习计算机基础3。
9 0
解决echarts地图geoJson报错问题(“echarts.min.js:45 Uncaught Error: Invalid geoJson format Cannot read prope”)
解决报错: 1.Invalid geoJson format Cannot read property ‘length’ of undefined 2 echarts.min.js:45 Uncaught Error: Invalid geoJson format Cannot read prope
5 0
【大数据组件】一篇文章让你快速入门Docker
Docker 是什么? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
15 0
飞天加速计划使用体验
对于云服务器的使用体验感受
22 0
冬季实战营第一期学习报告
通过五天学习与实操,对ECS云服务器入门、快速搭建LAMP环境、部署MySQL数据库、回顾搭建Docker环境和Spring Boot以及使用PolarDB和ECS搭建门户网站操作,对本期学习与实操的认识。
7 0
冬季实战营第一期:从零到一上手玩转云服务器实验报告
第一期主要进行了六次实验,分别是《动手实操ECS云服务器》、《动手实操快速搭建LAMP环境》、《使用ECS服务器部署MySQL数据库》、《通过workbench远程登录ECS,快速搭建Docker环境》、《从零搭建Spring Boot的Hello World》以及《使用PolarDB和ECS搭建门户网站》。首先远程登陆ECS实例,搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。然后配置及远程访问MySQL。冯晓帅老师在直播上带大家通过workbench登录ECS并快速搭建Docker环境,运行Spring Boot,最后安装WordPress并搭建博客。
8 0
冬季实战营第一期:从零到一上手玩转云服务器学习总结
冬季实战营第一期:从零到一上手玩转云服务器学习总结
6 0
架构修炼之道 | 一个传统网关系统有几种 “死” 法(下)
架构修炼之道 | 一个传统网关系统有几种 “死” 法(下)
4 0
+关注
张晓灿
大学生
52
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载