一、概述

  Android中,上下文菜单是通过onLongClick(...)事件访问的。在事件触发后显示菜单项。

  在使用上下文菜单时,通常在onCreate(...)方法中,先行注册上下文菜单。在实现onCreateContextMenu(...)方法和onContextItemSelected(...)方法。

  注册菜单方法:registerForContextMenu(...)

  注销注册菜单方法:unregisterForContextMenu(...)

二、使用XML文件添加上下文菜单

  text_menu.xml上下文菜单选项:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
 3     <item android:title="File">
 4         <menu>
 5             <group android:checkableBehavior="none">
 6                 <item android:id="@+id/file_new"
 7                       android:title="New"
 8                       android:icon="@android:drawable/ic_input_add"
 9                       android:alphabeticShortcut="n" />
10                 <item android:id="@+id/file_save"
11                       android:title="Save"
12                       android:icon="@android:drawable/ic_menu_save"
13                       android:alphabeticShortcut="s" />
14             </group>
15         </menu>
16     </item>
17     <item android:title="Edit">
18         <menu>
19             <!-- 单选按钮组 -->
20             <group android:checkableBehavior="single">
21                 <item android:id="@+id/cut"
22                       android:title="Cut"
23                       android:alphabeticShortcut="Ctrl + x" />
24                 <item android:id="@+id/copy"
25                       android:title="Copy"
26                       android:alphabeticShortcut="Ctrl + c" />
27                 <item android:id="@+id/paste"
28                       android:title="Paste"
29                       android:alphabeticShortcut="Ctrl + v" />
30             </group>
31         </menu>
32     </item>
33 </menu>

  在代码中,添加上下文菜单显示,及在选择上下文菜单项时触发事件(MainActivity.java):

 1 public class MainActivity extends Activity
 2 {
 3     private static final String TAG = "MainActivity";
 4     private Context mContext;
 5     private EditText mEditMenu;
 6     private MenuInflater mMenuInflater;
 7
 8     @Override
 9     public void onCreate(Bundle savedInstanceState)
10     {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.activity_main);
13
14         mContext = getApplicationContext();
15
16         // 绑定菜单按钮事件
17         mEditMenu = (EditText) findViewById(R.id.input_text3);
18         // 注册上下文菜单
19         registerForContextMenu(mEditMenu);
20     }
21
22     // 上下文菜单,与EditView控件绑定,长按显示菜单项
23     @Override
24     public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo contextMenuInfo)
25     {
26         super.onCreateContextMenu(menu, view, contextMenuInfo);
27         // 创建新的contextMenu对象
28         mMenuInflater = new MenuInflater(this);
29         // 使用XML与原menu对象对新ContextMenu对象初始化
30         mMenuInflater.inflate(R.menu.text_menu, menu);
31     }
32
33     // 上下文菜单,触发上下文菜单项点击事件时响应
34     @Override
35     public boolean onContextItemSelected(MenuItem item)
36     {
37         switch (item.getItemId())
38         {
39             case R.id.file_new:
40             {
41                 Toast.makeText(mContext, "File new.", Toast.LENGTH_SHORT).show();
42                 break;
43             }
44             case R.id.file_save:
45             {
46                 Toast.makeText(mContext, "File save.", Toast.LENGTH_SHORT).show();
47                 break;
48             }
49             case R.id.cut:
50             {
51                 Toast.makeText(mContext, "Edit cut.", Toast.LENGTH_SHORT).show();
52                 break;
53             }
54             case R.id.copy:
55             {
56                 Toast.makeText(mContext, "Edit copy.", Toast.LENGTH_SHORT).show();
57                 break;
58             }
59             case R.id.paste:
60             {
61                 Toast.makeText(mContext, "Edit paste.", Toast.LENGTH_SHORT).show();
62                 break;
63             }
64             default:
65                 Toast.makeText(mContext, "无响应", Toast.LENGTH_SHORT).show();
66         }
67         return true;
68     }
69
70     // 注销注册过的上下文菜单
71     @Override
72     public void onDestroy()
73     {
74         super.onDestroy();
75         unregisterForContextMenu(mEditMenu);
76     }
77 }

  PS: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必须已经注册了上下文菜单。

转载于:https://www.cnblogs.com/naray/p/5358438.html

Android 上下文菜单(Context Menu)相关推荐

  1. 5.4 Android 的上下文菜单: Context Menu,registerForContextMenu(getListView())

    Android 的上下文菜单: Context Menu,registerForContextMenu(getListView()) Android 的上下文菜单类似于 PC 上的右键菜单.当为一个视 ...

  2. Android 的上下文菜单: Context Menu,registerForContextMenu(getListView())

    概述: Android 的上下文菜单类似于 PC 上的右键菜单.当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单.任何视图都可以注册上下文菜单,不过, ...

  3. 学习之路(一)Android 的上下文菜单: Context Menu,registerForContextMenu(getListView());

    概述: Android 的上下文菜单类似于 PC 上的右键菜单.当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单.任何视图都可以注册上下文菜单,不过, ...

  4. 上下文菜单Context Menu

    Android的上下文菜单在概念上和PC软件的右键菜单类似.当一个视图注册到一个上下文菜单时,执行一个在该对象上的"长按"(按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动 ...

  5. Android 中实现上下文菜单(Context menu)详解

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,

  6. Android 上下文菜单实现 context Menu

    Android 上下文菜单实现 2011年3月31日9:25 来源:Android中文网 我有话说(2人参与) 首先解释一下什么是上下文菜单,Android中上下文菜单就是ContextMenu.他的 ...

  7. Android 上下文菜单实现

    1.覆盖Activity的onCreateContenxtMenu()方法,调用Menu的add方法添加菜单项(MenuItem). 2.覆盖Activity的onContextItemSelecte ...

  8. Android 上下文菜单

    1.创建菜单资源文件 在res下新建menu文件夹:右击menu文件夹新建菜单资源文件menu.xml. <?xml version="1.0" encoding=" ...

  9. 手机浏览器中屏蔽img的系统右键菜单context menu

    我们知道通过oncontextmenu事件可以屏蔽浏览器右键菜单 $('img').on("contextmenu",function(E){E.preventDefault(); ...

最新文章

  1. 自从上了 SkyWalking,睡觉真香!!
  2. css 调用变量 php,PHP 变量
  3. 插入排序--希尔排序
  4. Laravel Scheduling Package
  5. 【linux】zip unzip
  6. 哈工大三本计算机考研,纯干货【普通三本逆袭哈工大】—城市规划考研必胜经验...
  7. 专科学数控还是计算机,盘点适合专科男生学的专业 哪些专业好就业
  8. thinkPHP6.0 控制器请求方法延迟生效解决办法
  9. 输入图像四通道 输出图像四通道
  10. 第14题 计算机网络故障排除的第二步是,计算机网络故障诊断与排除第1章网络故障和网络诊断测试工具(习题)(ok)...
  11. SVN删除某版本解决办法
  12. 肤色检测一例-使用rgb颜色模型
  13. 拓端tecdat|R语言时间序列GARCH模型分析股市波动率
  14. spring mvc 简单的文件上传与下载
  15. Unity PlayerSetting设置
  16. 中国网络安全厂商、安全培训机构大全(2019-7-1)
  17. 创业者应该问投资人的10个问题
  18. C#获取SharePoint列表数据
  19. 【我的Android进阶之旅】Configuration 'compile' is obsolete and has been replaced with 'implementation' and
  20. 《纸短情长》世间最美的情书♡摘录

热门文章

  1. 学习数据库的三大范式
  2. eclipse中tomcat能正常启动,在浏览器中不能打开问题
  3. ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
  4. sql中的遇到的有问题的
  5. dos命令查看oracle_home,Oracle - OraDb10g_home1配置方法+DOS命令
  6. join left semi_HIVE--left semi join
  7. 无线ap软件_无线WIFI网络干扰优化,不懂必看!新手在家里也能用的网络知识
  8. matplotlib  plt.scatter
  9. python 与别的程序通信_《Python》进程之间的通信(IPC)、进程之间的数据共享、进程池...
  10. LeetCode-best time to buy and sell stock 1 数组