【转】 Pro Android学习笔记(三二):Menu(3):Context菜单
什么是Context menu
在桌面电脑,我们都很熟悉Context menu,按鼠标右键显示的菜单就是context菜单。在Android中,通过长时间鼠标按键可以触发context菜单。对于触屏设备,手指长按就是长鼠标按键事件。
一个activity有一个且只能有一个OptionMenu,一个view可以有一个且最多只能有一个ContextMenu。检查鼠标长按是基于view来监听。因此一个activity中可有多少个view,就可以有多少个ContextMenu。
注册View带有Context menu
如果某个view带有Context menu,需要先在onCreate()中注册,代码如下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pure_text);
//小例子中只有一个全屏的TextView
infoTv = (TextView)findViewById(R.id.pureInfo);
//【步骤1】:在onCreate()中为view注册context菜单
registerForContextMenu(infoTv);
}
填Context菜单内容
注册之后,我们要具体编写菜单项,将重写onCreateContextMenu(),例子代码如下:
private static int TV_CONTEXTMENU_BASE = 1000;
//第一个参数是预构的ContextMenu对象,第二个参数是所注册的view,第三个参数一般我们不使用,但是有时view需要需要通过该参数传递信息。ContextMenuInfo是接口,实现的类有AdapterContextMenuInfo和ExpandableContextMenu。如果传递的信息和cursor有关,可以使用AdapterContextMenuInfo来传递rowId。
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//设置标题图标和标题,并添加两个菜单项
menu.setHeaderIcon(R.drawable.leaf);
menu.setHeaderTitle("Context Menu :");
menu.add(Menu.NONE, TV_CONTEXTMENU_BASE,TV_CONTEXTMENU_BASE, "item.1");
menu.add(Menu.NONE, TV_CONTEXTMENU_BASE + 1,TV_CONTEXTMENU_BASE + 1,"item.2");
//子菜单嵌套测试
SubMenu subMenu = menu.addSubMenu("子菜单");
subMenu.setHeaderIcon(R.drawable.clock);
subMenu.add(Menu.NONE,TV_CONTEXTMENU_BASE + 100, + TV_CONTEXTMENU_BASE + 100,"sub.1");
subMenu.add(Menu.NONE,TV_CONTEXTMENU_BASE + 101, + TV_CONTEXTMENU_BASE + 101,"sub.2");
}

ContextMenu和OptionMenu在初始化中是有区别的,OptionMenu是在Activity创建时进行的,而ContextMenu则是每次长按鼠标事件时触发的。对于同一个view,每次长按键都会调用onCreateContextMenu()。经过跟踪,每次返回新的ContextMenu对象,也就是ContextMenu是实时创建的,这点要注意。
Context菜单点击触发
ContextMenu是Menu接口的实现,触发机制非常相似。例子代码如下:
@Override
public boolean onContextItemSelected(MenuItem item) {
if(item.getItemId() == TV_CONTEXTMENU_BASE){
showInfo("item.1 was clicked ");
}else{
showInfo("ItemId " + item.getItemId() + " has nothing done");
}
return super.onContextItemSelected(item);
}
本博文涉及的例子代码,可以在Pro Android学习:Menu中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(三二):Menu(3):Context菜单的更多相关文章
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout
目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...
- 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...
- 【转】Pro Android学习笔记(二六):用户界面和控制(14):RelativeLayout
相对布局:RelativeLayout RelativeLayout也是非常常用的布局,能够精确对控件的位置进行网格对齐,可以设置在控件与其他控件的相对位置,以及控件在容器中的位置.缺省控件的位置为最 ...
- 【转】 Pro Android学习笔记(二一):用户界面和控制(9):Gallery和SimpleAdapter
Gallery画廊式控件,如图所示,但是在API level 16,也即Android 4.1,被deprecated,可以使用HorizontableScroolView和ViewPager.但是后 ...
- 【转】Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme
目录(?)[-] 静态格式 代码中设定 Style Theme 静态格式 在res/values中设置静态的Style,在资源中设置静态Style可使用的HTML格式有<i> <u& ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
随机推荐
- activiti踩坑
最近在学习activiti,偶然间遇到一个错误:加载引擎的时候报错,显示空指针错误,跟代码发现初始化配置文件返回为null.几经排查,可能是因为我发布流程后又清空了数据库数据导致的.然后我把表全部删除 ...
- python 统计单词出现次数
#use python3.6 import re from collections import Counter FILESOURCE = './abc.txt' def getMostCommonW ...
- 一张图学习vim常用命令
一张图学习vim常用命令
- MySQL与Oracle的语法区别详细对比
MySQL与Oracle的语法区别详细对比 Oracle和mysql的一些简单命令对比在本文中将会涉及到很多的实例,感兴趣的你不妨学习一下,就当巩固自己的知识了 Oracle和mysql的一些简单 ...
- Data Structure Linked List: Write a function to reverse a linked list
iterative太简单不写了 http://www.geeksforgeeks.org/write-a-function-to-reverse-the-nodes-of-a-linked-list/ ...
- css属性background
一.background-size 1.具体设定的px值,及北背景图片的具体宽高 2.设定的百分比,相对于容器的宽高 3.设定三个铺设类型: (1)cover: 以宽 / 高 为基本,尽可能的去铺满整 ...
- Python3 logging 模块
Python3 logging模块 日志模块: 用于便捷记录日志且线程安全的模块 CRITICAL = 50 FATAL = CRITICAL ERROR = 40 WARNING = 30 WARN ...
- web框架详解之 tornado 四 模板引擎、session、验证码、xss
一.模板引擎 基本使用 继承,extends 页面整体布局用继承 导入,include 如果是小组件等重复的那么就用导入 下面是目录 首先在controllers里面创建一个文件,文件里面是页面类 # ...
- 第三篇、javascript整数和字符串
一.整数 JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示. 转换: parseInt(..) 将某值转换成数字,不成功则NaN parseFloat ...
- 浅谈Android系统开发中LOG的使用【转】
本文转载自:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以 ...