Android的onCreateOptionsMenu()创建菜单Menu详解
2019独角兽企业重金招聘Python工程师标准>>>
Android一共有三种形式的菜单:1.选项菜单(optinosMenu)2.上下文菜单(ContextMenu)3.子菜单(subMenu)
其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的Activity底部显示出来。1.Activity菜单机制 (与dialog类似)
Activity有一套机制来实现对菜单的管理,方法如下:1.public boolean onCreateOptionsMenu(Menu menu)此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。返回true则显示该menu,false 则不显示;(只会在第一次初始化菜单时调用)2.public boolean onPrepareOptionsMenu(Menu menu)在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。同样的, 返回true则显示该menu,false 则不显示;(可以通过此方法动态的改变菜单的状态,比如加载不同的菜单等)3.public void onOptionsMenuClosed(Menu menu)每次菜单被关闭时调用.(菜单被关闭有三种情形,menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项)4.public boolean onOptionsItemSelected(MenuItem item)菜单项被点击时调用,也就是菜单项的监听方法。通过这几个方法,可以得知,对于Activity,同一时间只能显示和监听一个Menu 对象。2. 添加菜单:可以在onCreateOptionsMenu或者onPrepareOptionsMenu方法中来添加菜单2.1代码添加:menu.add((int groupId, int itemId, int order, charsequence title) .setIcon(drawable ID) add()方法的四个参数,依次是: 1、组别,如果不分组的话就写Menu.NONE, 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 3、顺序,哪个菜单项在前面由这个参数的大小决定 4、文本,菜单项的显示文本add()方法返回的是MenuItem对象,调用其setIcon()方法,为相应MenuItem设置Icon示例:public boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);menu.add(Menu.NONE, Menu.First+1, 0, "设置").setIcon(R.drawable.setting);return true;}2.2布局文件添加:getMenuInflater().inflate(R.menu.options_menu, menu);调用Activity的getMenuInflater()得到一个MenuInflater, 使用inflate方法来把布局文件中的定义的菜单 加载给 第二个参数所对应的menu对象示例:@Overridepublic boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);getMenuInflater().inflate(R.menu.options_menu, menu);return true;}布局文件:在res目录下建立一个menu文件夹,并创建布局文件: options_menu.xml <?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@+id/menu_setting" android:title="设置" android:icon="@drawable/setting"></item></menu>3.菜单项监听:只要菜单中的菜单项被点击,都会触发onOptionsItemSelected(MenuItem item)item参数即为被点击的菜单项,那么需要在此方法内判断哪个Item被点击了,从而实现不同的操作。对于两种不同的添加菜单方法,判断的方法有一点区别,但本质是一样的。3.1代码添加菜单的判断方法@Overridepublic boolean onOptionsItemSelected(MenuItem item) {super.onOptionsItemSelected(item);switch(item.getItemId())//得到被点击的item的itemId{case Menu.First+1: //对应的ID就是在add方法中所设定的Idbreak;case Menu.First+2:break;}return true;}3.2布局文件添加菜单的判断方法:@Overridepublic boolean onOptionsItemSelected(MenuItem item) {super.onOptionsItemSelected(item);switch(item.getItemId())//得到被点击的item的itemId{case R.id.menu_setting://这里的Id就是布局文件中定义的Id,在用R.id.XXX的方法获取出来break;case R.id.menu_info:break;}return true;}
转载于:https://my.oschina.net/u/1410278/blog/224414
Android的onCreateOptionsMenu()创建菜单Menu详解相关推荐
- Android Library的创建及使用详解
Android Library和Android APP.Java Library的区别 Android Library在目录结构上与Android App相同,它能包含构建APP所需的一切(如源代码. ...
- Menu详解(二):利用XML生成菜单和子菜单
前言:上篇,我们说了有关代码生成菜单和子菜单的方法,这里我们再讲讲有关利用XML生成菜单和子菜单的问题. 业精于勤,荒于嬉,行成于思,毁于随 (日拱一卒) 系列文章: 1.<Menu详解(一): ...
- linux右键菜单颜色,Linux_自定义右键菜单代码详解, style !-- /*定义菜单 - phpStudy...
自定义右键菜单代码详解 < style > < !-- /*定义菜单方框的样式1*/ .skin0 { position:absolute; text-align:left; wid ...
- 《Android 网络开发与应用实战详解》——1.3节搭建Android应用开发环境
本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第1章,第1.3节搭建Android应用开发环境,作者 王东华,更多章节内容可以访问云栖社区"异步社区&qu ...
- 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...
- Android 应用程序之间内容分享详解(二)
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9428613 Android 应用程序之间内容分享详解(一) 之前给大家分享了你开发的应 ...
- Android init.rc文件解析过程详解(三)
Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...
- Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例
使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWRevealViewController实现侧边菜单功能: 1.使用StoryBoard实现 2.纯代码实 ...
最新文章
- c#用正则表达式获得指定开始和结束字符串中间的一段文本
- POJ 1679 判断最小树是否唯一
- 对神经网络分类行为的认识二则
- mysql 5.7 winx64_mysql 5.7.27 winx64安装配置方法图文教程
- SDL 库 无法解析的外部符号 __imp__fprintf
- iOS5 UI 设计新手段 Storyboard
- golang中如何使用http,socket5代理
- 过程定义伪指令proc和宏命令伪指令macro
- debian sources
- Merged Manifest官方文档
- 修改 mac 截图默认保存位置
- Apache 服务器特点
- 一个简单的登录注册网页的实现
- 【天下有春】七日之书
- 一年200多天不上网 看远望7号船员怎么玩抖音
- NEFU 大一寒假培训【一】二维数组、结构体
- 海思hi3519a的MIPI用法
- 转:中国移动宽带光猫F663路由模式改桥接模式
- 论文《ImageNet Classification with Deep Convolutional Neural Networks》阅读及AlexNet的Tensorflow2复现
- ibatis mysql存储过程_分步详解 如何在iBatis中调用存储过程
热门文章
- 前端工程师-JavaScript
- 8VC Venture Cup 2016 - Final Round (Div. 2 Edition)
- 一个轮显插件的尝试、思考和扩展
- 名言名人2008-11-22
- 第1章 神经网络的思想
- iOS:类似于网易云音乐的刷新条目显示弹框
- STM32 KEIL 下的 printf 函数
- 读书笔记-01大型网站架构演化的价值观
- Python version 3.3 required, which was not found in the registry
- Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?