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. ui4-5

    2016PS第4-5周 图像的高级编辑方法: 4-1.用变换将照片放入相框 1.打开素材文件01-1.jpg 2.执行:文件/置入,选素材01-2.jpg 3.执行:编辑/变换/缩放,缩小照片,暂不退 ...

  2. 七,OpenERP 移库操作模块

    整个代码中比较关键的地方是如何统计出不同库位的产品数量.

  3. eclipse常用快捷键实践积累

    1. [Ctrl + D]:删除一整行 2. 给函数添加注释 [选中函数名]-[Alt + Shift + J].如果需要自定义注释内容可通过[项目]-[属性]-[Java代码样式]-[代码模板]-[ ...

  4. C# 文件读写系列三

    1.读写文本文件 在C# 文件读写系列二中列举了相当多的读写文本文件的方法,大致有以下几种: (1).通过静态类File的静态方法来进行文本文件的读写,主要有ReadAllBytes().ReadAl ...

  5. redis持久化之 aof日志

    aof就是把执行的命令写到文本文件里面 aof使用过程 第一步: 修改配置文件,并启动server 第二步, 当前目录下面会生成一个 appendonly.aof文件,但是是空的 去客户端 开始操作后 ...

  6. 用Akka构建一个简易的分布式文件系统

    本来初期打算用Hadoop 2,可是后来有限的服务器部署了Solr Cloud,各种站点,发现资源不够了,近10T的文件,已经几乎把服务器的磁盘全部用光.想来想去,由于目前架构基于Scala的,所以还 ...

  7. Ubuntu14.04下Cloudera安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)(在线或离线)

    第一步: Cloudera Manager安装之Cloudera Manager安装前准备(Ubuntu14.04)(一) 第二步: Cloudera Manager安装之时间服务器和时间客户端(Ub ...

  8. InnoDB索引概述,二分查找法,平衡二叉树

    索引是应用程序设计和开发的一个重要方面.如果索引太多,应用的性能可能会受到影响:如果索引太少,对查询性能又会产生影响.要找到一个合适的平衡点,这对应用的性能至关重要. 如果知道数据的使用,从一开始就应 ...

  9. 一头扎进Spring之---------Spring七大核心模块

    Spring七大核心模块 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanF ...

  10. SharePoint 2013的REST编程基础

    1. SharePoint 2013对REST编程的支持 自从SharePoint2013开始, SharePoint开始了对REST 编程的支持,这样除了.NET , Silverlight, Po ...