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.pswp.cn/news/372235.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372235.shtml
英文地址,請注明出處:http://en.pswp.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…