上下文菜单ContextMenu使用案例

前言

回顾之前的应用程序,发现之前创建的选项菜单无法显示了。按照正常逻辑来说,左图中在“商品信息”一栏中应该存在选项菜单,用户可进行分享等操作,但是现在此操作莫名其妙的消失了。写了个测试Demo,如中图所示,一切按照逻辑显示正常。怪就怪在项目中无法显示,起初设想是因为Android系统版本太高问题,但是在别的手机上测试之后发现问题依旧存在。难道是因为顶部Tab标题栏遮挡住了选项菜单的显示?继续测试,通过在别的没有Tab标题栏的页面测试选项菜单,发现依旧无法显示,如右图所示。这样问题就变得更加棘手了。难道是因为项目整体设置问题,这方面的原因很大,不过由于问题根源不明确,所以修改也存在一定的难度。

                         

转变思路

既然通过选项菜单无法完成操作,通过阅读书籍得知还存在另外两种形式的菜单:子菜单(submenu)、快捷菜单(context menu),尝试新建context menu解决问题。

快捷菜单类似于计算机程序中的“右键菜单”,当用户点击界面上某个元素超过2秒后,将启动注册到该界面元素的快捷菜单。快捷菜单同样采用浮动的显示方式,虽然快捷菜单的显示方式与子菜单相同,但两种菜单的启动方式却截然不同。

快捷菜单的使用方法与选项菜单极为相似,只是重载的函数不同而已。快捷菜单需要重载onCreatContextMenu()函数初始化菜单项,包括添加快捷菜单所显示的标题、图标和菜单子项等内容。

有关选项菜单的创建代码,详见博文《Android进阶(二十六)MenuInflater实现菜单添加》,在此不再展示。

源码

[java] view plaincopy print?
  1. // 添加快捷菜单
  2. // 1.重写onCreateContextMenu(Menu menu)的方法,在该方法里调用Menu对象的方法来添加菜单项或子菜单
  3. @Override
  4. public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
  5. MenuInflater inflater = new MenuInflater(this);
  6. // 装填R.menu.production_info_activity_menu对应的菜单,并添加到menu中
  7. inflater.inflate(R.menu.production_info_activity_menu, menu);
  8. menu.setHeaderTitle("QuickMark");
  9. super.onCreateContextMenu(menu, v, menuInfo);
  10. }
  11. // 2.若希望应用程序能够相应菜单项的单击事件,重写Activity的onContextItemSelected(MenuItem item)方法即可
  12. @Override
  13. public boolean onContextItemSelected(MenuItem item) {
  14. // 得到当前选中的MenuItem的ID,
  15. int item_id = item.getItemId();
  16. // 判断单击的是是哪个菜单项,并有针对性的做出响应
  17. switch (item_id) {
  18. case R.id.PIA_menuitem_fenxiang: {
  19. Intent intent = new Intent(Intent.ACTION_SEND);
  20. //设置分享类型
  21. //intent.setType("image/*");
  22. intent.setType("text/plain");
  23. intent.putExtra(Intent.EXTRA_SUBJECT, "Share");
  24. //好戏在这里!
  25. intent.putExtra(Intent.EXTRA_TEXT,
  26. "#我正在使用“QuickMark”购物评价分享软件(分享自华强APP)#" + product.toString());
  27. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  28. startActivity(Intent.createChooser(intent, getTitle()));
  29. };break;
  30. case R.id.PIA_menuitem_shuaxin:{}
  31. }
  32. return true;
  33. }

将快捷菜单注册到界面中的某一控件代码如下:

[java] view plaincopy print?
  1. public void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.production_info_activity);
  4. // 将快捷菜单注册到商品二维码图片上
  5. LinearLayout layout = (LinearLayout) findViewById(R.id.PIA_linearLayout);
  6. registerForContextMenu(layout);
  7. .....}

其中,R.id.PIA_linearLayout为整体线性布局的ID。

效果如下图所示:

             

至此,快捷菜单创建完毕。

注 onCreateContextMenu与onCreateOptionsMenu的区别

onCreateOptionsMenu函数仅在第一次使用菜单时被调用一次;

onCreateContextMenu函数在每次启动都将会被调用一次。

参考文献

1.《Android应用程序开发 第二版》

2.http://www.2cto.com/kf/201309/247051.html

美文美图

Android进阶(二十八)上下文菜单ContextMenu使用案例相关推荐

  1. mysql revoke 用法_mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执行查 ...

  2. Android进阶(二十六)MenuInflater实现菜单添加

    MenuInflater实现菜单添加 前言 之前实现的Android项目中可以实现菜单的显示.但是再次调试项目时发现此功能已无法实现,很是令人费解.难道是因为自己手机Android系统的问题?尝试通过 ...

  3. Android进阶 二十四 Android UI---界面开发推荐颜色

    Android UI---界面开发推荐颜色   在Android开发过程中,总要给app添加一些背景,个人认为使用纯色调便可以达到优雅的视觉效果. 补充一些常用的颜色值:colors.xml < ...

  4. mysql进阶(二十八)GRANT REVOKE用法

    文章目录 一.前言 二.查看用户权限 三.撤销已赋予给 MySQL 用户的权限 四.grant.revoke 用户权限注意事项 五.用户和权限管理命令 六. grant 权限 七.拓展阅读 一.前言 ...

  5. 二十八、电力窃漏电案例模型构建

    1. 综合案例模型构建 构建窃漏电用户识别模型: 构建LM神经网络模型: 构建CART决策树模型: 模型评价 2. 构建窃漏电用户识别模型 2.1 构建专家样本 专家样本准备完成后,需要划分测试样本和 ...

  6. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...

  7. 关闭数字健康 android 魅族,数字体验 篇二十八:精雕细刻,只为给魅友更好的选择,魅族16s Pro体验分享...

    数字体验 篇二十八:精雕细刻,只为给魅友更好的选择,魅族16s Pro体验分享 2019-09-06 17:31:22 14点赞 10收藏 15评论 当我还一直在称赞魅族16s所拥有的舒适手感表现时, ...

  8. RecyclerView完全解析,让你从此爱上它(二十八)

    RecyclerView完全解析,让你从此爱上它(二十八) 2015-11-20      0 个评论   来源: 专注移动开发,项目管理.jiangqqlmj   收藏   我要投稿 (一).前言: ...

  9. 2008R2Win7管理二十八Mail之基本使用

    2008R2Win7管理二十八Mail之基本使用 上篇我们已经安装好了exchange2010,呵呵本片简单介绍和看下ex2010的基本界面和使用 安装完成打开exchange控制台如图所示 汗,有试 ...

最新文章

  1. Arduino 各种模块篇 光敏感应器 简易光敏
  2. Python SQLAlchemy
  3. 浏览新闻oracle的数据结构,oracle 数据结构探索之旅二 [2]
  4. 【PAT乙级题库】全套总结
  5. 【杂记】2020年度中国医院排行榜
  6. GDCM:将PAPYRUS 3.0文件转换为dcm文件的的测试程序
  7. 2013\Province_Java_C\1.猜年龄
  8. 基础拾遗------泛型详解
  9. PKUSC2018训练日程(4.18~5.30)
  10. python中的常量是指_python入门教程04-01(python语法入门之变量)
  11. 技术就是力量?!有人拿走百万现金,真相却是......
  12. 【Git/Github学习笔记】ubuntu系统下使用git命令与windows下的差别
  13. silverlight 碰撞检测
  14. 基于深度学习生成音乐(mid格式)
  15. 大数据开发,如何发掘数据的关系?
  16. 计算机定期备份用什么程序,推荐的电脑定时自动备份软件!
  17. 5G+北斗融合定位技术介绍
  18. 大数据开发之Hive优化篇6-Hive on spark
  19. jq将时间戳转为标准时间
  20. 君表增强了公式计算中的区域引用,支持SUM(A:A)

热门文章

  1. MATLAB 如何在二维矩阵中快速找到最大值的位置
  2. APIPOST 常见设置项
  3. python通达信接口_mootdx: 通达信数据读取 pytdx 的一个简便使用封装
  4. 企业邮箱域名怎么填写,企业邮箱号怎么注册?
  5. 在一个项目编译多个不同签名、包名、资源实现apk换皮
  6. 此次519暴跌的几点感触 2021-05-21
  7. c#自己做的定时关机小程序附加源代码
  8. 数据存储|信息安全技术在SSD中的应用分享
  9. 基于SpringCloudAlibaba模拟商城下单功能
  10. Ubuntu 12.04 LTS 64bit 下安装 jdk-6u43-linux-x64.bin的步骤