Android 上下文菜单(Context Menu)

一、概述

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RGB颜色空间alpha混合的方法

http://blog.csdn.net/xhhjin/article/details/6444782http://blog.csdn.net/xhhjin/article/details/6445460http://www.cnblogs.com/graphics/archive/2012/08/23/2643086.htmlhttp://www.oschina.net/code/snippet_1425046_27446 转载于:https://www.cnblogs.com/eustoma/p/…

Java怪异实践

总览 Java中有许多实践使我感到困惑。 这里只是一些。 使用-Xmx和-Xms 选项-Xmx广泛用于设置最大内存大小。 如Java HotSpot VM Options中所述&#xff0c;以-X开头的选项是非标准的&#xff08;不保证在所有VM实现中均受支持&#xff09;&#xff0c;并且在以后的JDK发行版中…

saml java实现_java-saml

软件简介java-saml 是 Java 的 SAML 开发包。Maven&#xff1a;com.oneloginjava-saml2.4.0示例代码&#xff1a;Map samlData new HashMap<>();samlData.put("onelogin.saml2.sp.entityid", "http://localhost:8080/java-saml-tookit-jspsample/metadat…

双系统Ubuntu分区扩容过程记录

本人电脑上安装了Win10 Ubuntu 12.04双系统。前段时间因为在Ubuntu上做项目要安装一个比较大的软件&#xff0c;导致Ubuntu根分区的空间不够了。于是&#xff0c;从硬盘又分出来一部分空间&#xff0c;分给Ubuntu。于是有了这篇Ubuntu扩容过程记录&#xff0c;也可以当作是一篇…

使用MongoDB的MapReduce

MapReduce是Google在2004年推出的一种软件框架&#xff0c;用于支持对计算机集群中的大数据集进行分布式计算。 您可以从此处阅读有关MapReduce的信息 。 MongoDB是用C 编写的面向开源文档的NoSQL数据库系统。 您可以从此处阅读有关MongoDB的更多信息。 1.安装MangoDB。 请遵…

java epson指令集_EPSON机械手 SPEL+语言指令集

下面是全部指令的简明列表&#xff0c;放在这里方便参考。之后重要的指令&#xff0c;勇哥要拿出来单独学习。系统管理相关命令Reset 将控制器重置为初始状态。SysConfig 显示系统设置参数。SysErr 返回最新的错误状态或警告状态。Date 显示日期。Time 显示时间。Date$ 以字符串…

1、关于action中解决跨域请求问题:

&#xff08;1&#xff09;、action中使用ajax传值时HttpServletRequest request ServletActionContext.getRequest(); String origin request.getHeader("Origin"); HttpServletResponse response ServletActionContext.getResponse(); response.setContentType(…

dom contains 包含关系

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>contains</title></head><body> <div id"p-node"> <div id"c-node">子节点内容&…

ANTLR:入门

这篇文章使您了解ANTLR的基础知识。 以前&#xff0c;我们已经了解了如何将ANTLR设置为外部工具。 在这里&#xff1a; ANTLR外部工具 :) 所以&#xff0c;我们开始…。 什么是ANTLR&#xff1f; •另一个语言识别工具&#xff0c;是一种语言工具&#xff0c;它提供了一个框架…

安装JAVA8要登录_JDK8的安装及环境配置

原文链接:https://www.cnblogs.com/chenxj/p/10137221.html1、下载JDK&#xff1b;b、或百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1S14y4_3eN9G6oOVfhmbe_w提取码&#xff1a;0cf62、双击安装程序&#xff0c;点击下一步安装目录若不修改&#xff0c;可直…

【学习笔记】JavaScript基础(一)

【学习过程遇到疑问和延伸阅读】 1.document.write()的深入理解write()方法可向文档写入HTML表达式或JavaScript代码。可使用document.write()向输出流写文本或者HTML 延伸阅读《js中document.write的那点事》http://www.cnblogs.com/dh616854836/articles/2140349.html 2.编程…

js操纵cookie技术

<% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>图片浏览</title> <script typ…

java none怎么用tomcat_使用tomcat做java中间件

tomcat是一个老牌的中间件了&#xff0c;从我从业到现在时不时都会遇到它&#xff0c;方便、灵活、性能一般是我对它的使用经验总结。配置注意 &#xff1a; tomcat 7 和 6 有很大差别&#xff0c;server.xml catalina.sh 配置文件不能通用设置tomcat7 使用jdk1.7export JAVA_H…

早期访问中带有NetBeans的Oracle公共云Java服务

谁期望发生这种情况&#xff1a;Oracle正在开发公共云产品&#xff0c;并且即将开始正式启动的迹象已经出现。 在正式宣布之后将近一年&#xff0c;我被邀请加入所谓的“抢先体验”计划&#xff0c;以试驾新服务并提供反馈。 多亏负责产品的经理Reza Shafii &#xff0c;我才可…

MySQL 分组之后如何统计记录条数 gourp by 之后的 count()

SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id //这样统计的会是每组的记录条数.如何获得 第二个sql语句的总记录条数? 则是&#xff0c;如下&#xff1a;    select count(*) from(SELECT count(*) F…

python CS游戏1--角色创建,武器购买

#codingutf-8 import random 本文字主要目的是随机创建一个角色&#xff0c;并且武器是随机产生的&#xff0c;自带系统给的费用10000,10000元钱可以购买武器&#xff0c;购买武器以后&#xff0c;钱会减少&#xff0c;直到不足提示无法购买 dir{"AK47":2000,"…

App Engine中的Google Services身份验证,第2部分

在本教程的第一部分中&#xff0c; 我描述了如何使用OAuth进行Google API服务的访问/身份验证。 不幸的是&#xff0c;正如我稍后发现的那样&#xff0c;我使用的方法是OAuth 1.0&#xff0c;显然现在Google正式弃用了OAuth 1.0&#xff0c;改用OAuth 2.0版本。 显然&#xff0…

字符串常用操作

1 常用&#xff1a;分割、长度、索引、切片2 r (1,2,3,4,5)#只读列表元组3 name "liangml"4 strip5 username input("user:")6 if username.strip() "liangml":#strip可以将输入前后的空格都换掉7 print("welcome")8 9 split …

java 保存bufferedimage_java - 如何将BufferedImage保存为Fi

答案在于Java Documentation的编写/保存图像教程。SaveImage.java类提供以下保存图像的方法&#xff1a;static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException该教程解释了这一点BufferedImage类实现RenderedImage接口。所以它…

MarkDownPad2 注册码

注册信息 邮箱地址&#xff1a; Soar360live.com 授权秘钥&#xff1a;GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6bnxn2kSE8qHqNY5QaaRxmO3YSMHxlv2EYpjdwLcPwfeTG7kUdnhKE0vVy4RidP6Y2wZ0q74f47fzsZo45JE2hfQBFi2O9Jldjp1mW8HUpTtLA2a5/sQytX…