4.5 菜单Menu

Android的菜单主要分两种,一种是选项菜单OptionMenu,通过按菜单键或点击事件触发,另一种是上下文菜单ContextMenu,通过长按事件触发。页面的布局文件放在res/layout目录下,菜单的布局文件存放在res/menu目录下。

1.选项菜单OptionMenu

弹出选项菜单的途径有3种:

(1)按菜单键

(2)在代码中手动打开选项菜单,即调用openOptionsMenu方法

(3)按工具栏右侧的溢出菜单按钮

实现选项菜单的功能需要重写以下两种方法:

onCreateOptionsMenu:在页面打开时调用,需要指定菜单列表的XML文件

onOptionsItemSelected:在列表的菜单项被选中时调用,需要对不同的菜单项做分支处理

菜单布局文件的代码样例:

<menu xmlns:android=http://schemas.android.com/apk/res/android>

<item

android:id=”@+id/menu_change_time”

android:orderInCategory=”1”

android:title=”改变时间”/>

   <item

android:id=”@+id/menu_change_color”

android:orderInCategory=”8”

android:title=”改变颜色”/>

  <item

android:id=”@+id/menu_change_bg”

android:orderInCategory=”9”

android:title=”改变背景”/>

</menu>

接下来是使用选项菜单的代码片段:

@Override

public Boolean onCreateOptionsMenu(Menu menu){

getMenuInflater().inflate(R.menu.menu_option, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if(id == R.id.……)……

else if…… ……

return true;

}

2.上下文菜单ContextMenu

弹出上下文菜单的途径有两种:

(1)默认在某个控件被长按时弹出,通常在onStart函数中加入registerForContextMenu方法为指定控件注册上下文菜单,在onStop函数中加入unregisterForContextMenu方法为指定控件注销上下文菜单。

(2)在除长按事件之外的其他事件中打开上下文菜单,先执行registerForContextMenu方法注册菜单,然后执行openContextMenu方法打开菜单,最后执行unregisterForContextMenu方法注销菜单

实现上下文菜单的功能需要重写以下两种方法:

onCreateContextMenu:在此指定菜单列表的XML文件,作为上下文菜单列表项的来源

onContextItemSelected:在此对不同的菜单项做分支处理

上下文菜单的布局文件格式同选项菜单,下面是使用上下文菜单的代码片段:
@Override
public void onClick(View v) {
   if (v.getId() == R.id.btn_context) {
       registerForContextMenu(v);
       openContextMenu(v);
       unregisterForContextMenu(v);
   }
}
@Override
protected void onResume() {
   registerForContextMenu(tv_context);
   super.onResume();
}
@Override
protected void onPause() {
   unregisterForContextMenu(tv_context);
   super.onPause();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
   getMenuInflater().inflate(R.menu.menu_option,
menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
   int id = item.getItemId();
   if (id == ……)

else if(id == ……)

return true;
}

菜单Menu(AS开发实战第四章学习笔记)的更多相关文章

  1. 4类Storage方案(AS开发实战第四章学习笔记)

    4.1 共享参数SharedPreferences SharedPreferences按照key-value对的方式把数据保存在配置文件中,该配置文件符合XML规范,文件路径是/data/data/应 ...

  2. Spring实战第四章学习笔记————面向切面的Spring

    Spring实战第四章学习笔记----面向切面的Spring 什么是面向切面的编程 我们把影响应用多处的功能描述为横切关注点.比如安全就是一个横切关注点,应用中许多方法都会涉及安全规则.而切面可以帮我 ...

  3. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  4. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  5. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  6. 《Linux内核设计与实现》第四章学习笔记

    <Linux内核设计与实现>第四章学习笔记           ——进程调度 姓名:王玮怡  学号:20135116 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交 ...

  7. 《Linux内核设计与实现》第四章学习笔记——进程调度

                                                                        <Linux内核设计与实现>第四章学习笔记——进程调 ...

  8. Spring实战第六章学习笔记————渲染Web视图

    Spring实战第六章学习笔记----渲染Web视图 理解视图解析 在之前所编写的控制器方法都没有直接产生浏览器所需的HTML.这些方法只是将一些数据传入到模型中然后再将模型传递给一个用来渲染的视图. ...

  9. Spring实战第五章学习笔记————构建Spring Web应用程序

    Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...

随机推荐

  1. /usr/bin/ld: cannot find -lperconaserverclient_r 解决

    编译sqladvisor安装遇到: [root@localhost sqladvisor]# cd SQLAdvisor/sqladvisor/ [root@localhost sqladvisor] ...

  2. Mac系统升级至OS X Mavericks后Genymotion出现的问题及解决方法

    Apple的系统升级终于免费了,可开心满满地升级到OS X Mavericks后,Android模拟器之王Genymotion罢工了.遇到两个问题:1. Unable to load VirtualB ...

  3. JS框架设计之命名空间设计一种子模块

    命名空间 1.种子模块作为一个框架的最开始,除了负责初始化框架的最基础部分. 2.种子模块作为框架的最开始,那么什么是种子框架的最开始呢?答案是IIFE(立即调用函数表达式); IIFE(立即调用函数 ...

  4. archlinux安装gnome的一些坑随记

    问题1:网络设置无法查看,提示缺少NetworkManager 解决:安装networkmanager库,因为gnome调用的是networkmanager这个软件来管理网络的.然后要启动它:sudo ...

  5. IDEA 启动项目,tomcat中配置的虚拟路径无法使用

    有时候,使用idea启动项目,非动静分离项目,直接根据图片url地址显示图片,会发现图片无法显示,tomcat中配置的虚拟路径无法使用,这时候需要配置idea.选择路径,然后给与一个访问名就行了.

  6. EntityFrameworkCode 操作MySql 相关问题

    近段时间,由于工作原因,使用到了EntityFrameworkCore 操作MySql数据库,使用中遇到一些问题,特此记录 系统环境 Win10 1805,VS 2017,Framework:Asp. ...

  7. tomcat主页打不开,tomcat manager 配置,Failed to start component [StandardEngine[Catalina].

    Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Serv]] ...

  8. CUBA-Platform将全面助力中国开发者

    关注CUBA的伙伴们,你们好! 今天我们有新的进展告诉大家. 九月十五日到十六日CUBA平台事业部负责人(同时也是Haulmont公司合伙人)专程来到中国与CUBA中国团队进行了两天时间的交流.讨论. ...

  9. Javad的Validator框架概述

    Java EE 6 提出了 Bean Validation 规范,使用注解的方式对 Java Bean 进行约束验证,不局限于某一层次或者某一编程模型,灵活易用.下边将向您系统的介绍该规范的各种特性. ...

  10. 搭建jdk环境

    jdk(java develop toolkit)主要包括:编译程序的javac,运行程序的java,javaAPI类库. 主要步骤: 下载jdk安装包 设置环境变量(JAVA_HOME,Path,C ...