Android之ContextMenu的使用方法以及与OptionMenu的区别
>> ContextMenu是android的context menu上下文菜单,选择某项VIEW后长按menu键,就会显示出来。比如EditeText就可以通过长按来弹出拥有“cut”,"copy","paste"等项的ContextMenu。
实现ContextMenu,一般要用到以下三个方法:
(1)registerForContextMenu(getExpandableListView());
(2)onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo);
(3)onContextItemSelected(MenuItem item);
尽管上下文菜单的拥有者是View,生成上下文菜单却是通过Activity中的onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo)方法,该方法很像生成Options Menu的onCreateOptionsMenu(Menu menu)方法。两者的不同在于,onCreateOptionsMenu只在用户第一次按“Menu”键时被调用,而onCreateContextMenu会在用户每一次长按View时被调用,而且View必须已经注册了上下文菜单。
另一个值得注意的就是上图中的ContextMenuInfo,该类的对象被传入onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo)方法,那么它有什么用呢?有时候,视图元素需要向上下文菜单传递一些信息,比如该View对应DB记录的ID等,这就要使用ContextMenuInfo。需要传递额外信息的View需要重写getContextMenuInfo()方法,返回一个带有数据的ContextMenuInfo实现类对象。
介绍了这么多,下面给出一个demo演示如何创建和响应上下文菜单:
1.在activity的onCreate(...)方法中为一个view注册上下文菜单
2.在onCreateContextMenuInfo(...)中生成上下文菜单。
3.在onContextItemSelected(...)中响应上下文菜单项。
菜单
1)注册上下文菜单
/** * 上下文菜单演示Demo * * @author CodingMyWorld 2011-8-27 下午03:22:39 */publicclass SampleContextMenuActivity extends ListActivity { privatestaticfinal String TAG ="SampleContextMenuActivity"; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 显示列表 simpleShowList(); // 为所有列表项注册上下文菜单this.registerForContextMenu(getListView()); } privatevoid simpleShowList() { // list item String[] files =new String[] { "文件1", "文件2", "文件3", "文件4" }; // simple array adapter ArrayAdapter<String> adapter =new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, files); // set adapterthis.setListAdapter(adapter); Log.v(TAG, "show simple list"); }}
2)生成上下文菜单
在activity中重写方法。
@Overridepublicvoid onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { Log.v(TAG, "populate context menu"); // set context menu title menu.setHeaderTitle("文件操作"); // add context menu item menu.add(0, 1, Menu.NONE, "发送"); menu.add(0, 2, Menu.NONE, "标记为重要"); menu.add(0, 3, Menu.NONE, "重命名"); menu.add(0, 4, Menu.NONE, "删除");}
3)响应上下文菜单项
与响应options menu类似,唯一的不同是可以通过menu info获得额外的信息。
@Overridepublicboolean onContextItemSelected(MenuItem item) { // 得到当前被选中的item信息 AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); Log.v(TAG, "context item seleted ID="+ menuInfo.id); switch(item.getItemId()) { case1: // do somethingbreak; case2: // do somethingbreak; case3: // do somethingbreak; case4: // do somethingbreak; default: returnsuper.onContextItemSelected(item); } returntrue;}
运行程序,多次唤出上下文菜单,注意LogCat的输出,onCreateContextMenu每一次都被调用了。
Android之ContextMenu的使用方法以及与OptionMenu的区别相关推荐
- (4.0.15.3)Android 的上下文菜单: ContextMenu的使用方法以及与OptionMenu的区别
ContextMenu是Android的context menu上下文菜单,选择某项VIEW后长按menu键,就会显示出来.比如EditeText就可以通过长按来弹出拥有"cut" ...
- android 动态contextmenu,Android成长日记-ContextMenu实现上下文菜单
一. ContextMenu的组成 标题以及标题图标 菜单内容 菜单内容的点击事件 二. ContextMenu与OptionMenu的区别 OptionMenu对应的是activity,一个acti ...
- android 动态contextmenu,Android中ContextMenu用法实例
本文实例讲述了Android中ContextMenu用法.分享给大家供大家参考.具体如下: main.xml文件如下: Android:orientation="vertical" ...
- Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...
- MyEclipse 10 中安装Android ADT 22插件的方法
MyEclipse 10 中安装Android ADT 22插件的方法 下载ADT包:http://dl.google.com/android/ADT-22.0.0.zip 将ADT-22.0.0.z ...
- android 按钮放中间,Android实现button居中的方法
本文实例讲述了Android实现button居中的方法.分享给大家供大家参考.具体如下: 通过在main.xml 或者其他xml 布局文件中布局Button的时候,选择Android:gravity= ...
- Android中实现震动的方法
https://blog.csdn.net/bruceyangjie/article/details/53283899 Android中实现震动的方法 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- android 怎么加链接地址,Android TextView添加超链接的方法示例
本文实例讲述了Android TextView添加超链接的方法.分享给大家供大家参考,具体如下: public class Link extends Activity { @Override prot ...
- 【Android NDK 开发】JNI 方法解析 ( JNIEnv *env 参数 )
文章目录 一. JNI 方法解析 二. JNIEnv *env 参数解析 三. C 语言 环境中 JNIEnv *env 参数解析 四. C ++ 环境中 JNIEnv *env 参数解析 总结 : ...
最新文章
- Android 高清加载巨图方案 拒绝压缩图片
- Java基础--String类底层实现原理及API示例详解
- 记录使用websocket时因为Sec-Websocket-Protocol遇到的一个问题
- php 邮件发送是html 没样式_使用python发送邮件
- retrofit 2.0 android 教程,初识Retrofit2.0
- 王思聪吃热狗的c语言小程序,王思聪吃热狗火了,开发各种恶搞小程序!王校长:我不要面子的啊...
- Python中的一些小语法
- 面试官:能说说Redis的持久化机制吗?
- sql server 加密_列级SQL Server加密概述
- 计算机组成原理讲义 微盘,计算机组成原理课件.pdf
- win10 如何做到 C盘 的绝对干净,所有软件都安装到D盘,C盘只用来存操作系统。
- 域名转移应该怎么做?域名转入是什么意思?手把手教你将阿里云备案域名转入到腾讯云
- 程序员使用谷歌搜索的十种技巧
- Encoder-Decoder 模型架构详解
- 常用cdn jq layui
- 第三方账号登陆-sina微博_PC篇
- (四)activiti的几个核心类
- ArcGIS教程:“格网和经纬网向导”快速浏览
- 通过virt-v2v将VMware ESXi 5中的vm迁移至kvm中
- 为用户提供功能模块(详解)