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详解相关推荐

  1. Android Library的创建及使用详解

    Android Library和Android APP.Java Library的区别 Android Library在目录结构上与Android App相同,它能包含构建APP所需的一切(如源代码. ...

  2. Menu详解(二):利用XML生成菜单和子菜单

    前言:上篇,我们说了有关代码生成菜单和子菜单的方法,这里我们再讲讲有关利用XML生成菜单和子菜单的问题. 业精于勤,荒于嬉,行成于思,毁于随 (日拱一卒) 系列文章: 1.<Menu详解(一): ...

  3. linux右键菜单颜色,Linux_自定义右键菜单代码详解, style !-- /*定义菜单 - phpStudy...

    自定义右键菜单代码详解 < style > < !-- /*定义菜单方框的样式1*/ .skin0 { position:absolute; text-align:left; wid ...

  4. 《Android 网络开发与应用实战详解》——1.3节搭建Android应用开发环境

    本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第1章,第1.3节搭建Android应用开发环境,作者 王东华,更多章节内容可以访问云栖社区"异步社区&qu ...

  5. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  6. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  7. Android 应用程序之间内容分享详解(二)

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9428613 Android 应用程序之间内容分享详解(一) 之前给大家分享了你开发的应 ...

  8. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  9. Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  10. iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例

    使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWRevealViewController实现侧边菜单功能: 1.使用StoryBoard实现 2.纯代码实 ...

最新文章

  1. c#用正则表达式获得指定开始和结束字符串中间的一段文本
  2. POJ 1679 判断最小树是否唯一
  3. 对神经网络分类行为的认识二则
  4. mysql 5.7 winx64_mysql 5.7.27 winx64安装配置方法图文教程
  5. SDL 库 无法解析的外部符号 __imp__fprintf
  6. iOS5 UI 设计新手段 Storyboard
  7. golang中如何使用http,socket5代理
  8. 过程定义伪指令proc和宏命令伪指令macro
  9. debian sources
  10. Merged Manifest官方文档
  11. 修改 mac 截图默认保存位置
  12. Apache 服务器特点
  13. 一个简单的登录注册网页的实现
  14. 【天下有春】七日之书
  15. 一年200多天不上网 看远望7号船员怎么玩抖音
  16. NEFU 大一寒假培训【一】二维数组、结构体
  17. 海思hi3519a的MIPI用法
  18. 转:中国移动宽带光猫F663路由模式改桥接模式
  19. 论文《ImageNet Classification with Deep Convolutional Neural Networks》阅读及AlexNet的Tensorflow2复现
  20. ibatis mysql存储过程_分步详解 如何在iBatis中调用存储过程

热门文章

  1. 前端工程师-JavaScript
  2. 8VC Venture Cup 2016 - Final Round (Div. 2 Edition)
  3. 一个轮显插件的尝试、思考和扩展
  4. 名言名人2008-11-22
  5. 第1章 神经网络的思想
  6. iOS:类似于网易云音乐的刷新条目显示弹框
  7. STM32 KEIL 下的 printf 函数
  8. 读书笔记-01大型网站架构演化的价值观
  9. Python version 3.3 required, which was not found in the registry
  10. Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?