>> 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);

>>ContextMenu和OptionsMenu相比主要有以下区别:
1,ContextMenu必须通过Activity的 registerForContextMenu(View)来进行注册,而OptionsMenu不用。
2,ContextMenu不支持icon,而OptionsMenu支持。
3,ContextMenu可以有头,可以通过setHeaderIcon,setHeaderTitle,setHeaderView来设置头,否则就没有头。
4,弹出的方式不一样。
5, Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View 。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们 调用 registerForContextMenu ( View  view) 来指定
注意事项:ContextMenu的任何项在被选中后,整个ContextMenu会自动被系统关闭掉,即使多选项也是这样。这样的话,多选项的行为就有些怪异。查看Android的源码后,发现这是个Android的bug,应该是google没考虑多选项的情况。

尽管上下文菜单的拥有者是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的区别相关推荐

  1. (4.0.15.3)Android 的上下文菜单: ContextMenu的使用方法以及与OptionMenu的区别

    ContextMenu是Android的context menu上下文菜单,选择某项VIEW后长按menu键,就会显示出来.比如EditeText就可以通过长按来弹出拥有"cut" ...

  2. android 动态contextmenu,Android成长日记-ContextMenu实现上下文菜单

    一. ContextMenu的组成 标题以及标题图标 菜单内容 菜单内容的点击事件 二. ContextMenu与OptionMenu的区别 OptionMenu对应的是activity,一个acti ...

  3. android 动态contextmenu,Android中ContextMenu用法实例

    本文实例讲述了Android中ContextMenu用法.分享给大家供大家参考.具体如下: main.xml文件如下: Android:orientation="vertical" ...

  4. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

    Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...

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

  6. android 按钮放中间,Android实现button居中的方法

    本文实例讲述了Android实现button居中的方法.分享给大家供大家参考.具体如下: 通过在main.xml 或者其他xml 布局文件中布局Button的时候,选择Android:gravity= ...

  7. Android中实现震动的方法

    https://blog.csdn.net/bruceyangjie/article/details/53283899 Android中实现震动的方法 版权声明:本文为博主原创文章,未经博主允许不得转 ...

  8. android 怎么加链接地址,Android TextView添加超链接的方法示例

    本文实例讲述了Android TextView添加超链接的方法.分享给大家供大家参考,具体如下: public class Link extends Activity { @Override prot ...

  9. 【Android NDK 开发】JNI 方法解析 ( JNIEnv *env 参数 )

    文章目录 一. JNI 方法解析 二. JNIEnv *env 参数解析 三. C 语言 环境中 JNIEnv *env 参数解析 四. C ++ 环境中 JNIEnv *env 参数解析 总结 : ...

最新文章

  1. Android 高清加载巨图方案 拒绝压缩图片
  2. Java基础--String类底层实现原理及API示例详解
  3. 记录使用websocket时因为Sec-Websocket-Protocol遇到的一个问题
  4. php 邮件发送是html 没样式_使用python发送邮件
  5. retrofit 2.0 android 教程,初识Retrofit2.0
  6. 王思聪吃热狗的c语言小程序,王思聪吃热狗火了,开发各种恶搞小程序!王校长:我不要面子的啊...
  7. Python中的一些小语法
  8. 面试官:能说说Redis的持久化机制吗?
  9. sql server 加密_列级SQL Server加密概述
  10. 计算机组成原理讲义 微盘,计算机组成原理课件.pdf
  11. win10 如何做到 C盘 的绝对干净,所有软件都安装到D盘,C盘只用来存操作系统。
  12. 域名转移应该怎么做?域名转入是什么意思?手把手教你将阿里云备案域名转入到腾讯云
  13. 程序员使用谷歌搜索的十种技巧
  14. Encoder-Decoder 模型架构详解
  15. 常用cdn jq layui
  16. 第三方账号登陆-sina微博_PC篇
  17. (四)activiti的几个核心类
  18. ArcGIS教程:“格网和经纬网向导”快速浏览
  19. 通过virt-v2v将VMware ESXi 5中的vm迁移至kvm中
  20. 为用户提供功能模块(详解)

热门文章

  1. fiddle无法抓包小程序解答
  2. 【23种设计模式】中介者模式(Mediator Pattern) .Net Core实现
  3. C/C++中,数组作为函数参数传入
  4. 怎样设计完整的交易系统(主观交易和程序化交易均可借鉴)
  5. 简单的python小程序祝福母亲,母亲节快乐!
  6. 服务熔断和服务降级的区别
  7. C语言和JAVA的区别在哪里?
  8. strtok、strtok_s、strtok_r 字符串分割函数
  9. Excel中的格式刷如何使用?
  10. python实训报告5000字_实习报告5000字