安卓監聽剪下複製貼上事件例項
本文的剪下複製貼上事件只針對文字,URI 和 intent 不在討論範圍內。
例項程式碼實現了2個功能:
- 監聽剪下複製貼上事件;
- 獲取剪下複製或貼上的文字;
剪下複製
有2個方法監聽剪下複製事件:剪下板和 EditText 的 onTextContextMenuItem() 方法。
二者的主要區別是:
- 剪下板是系統層面的全域性性質的監聽,而onTextContextMenuItem 只對某個 EditText 控制元件有效。
- 剪下板只能監聽到剪下複製事件,而無法監聽到貼上事件,而 onTextContextMenuItem 能既能監聽到剪下複製事件,又能監聽貼上事件;
方法一:剪下板
在這裡囉嗦幾句關於 Clipboard 的知識點:
- 剪下板不僅可以存文字,還可以存 URI 和 Intent;
- 剪下板上只保持對 PrimaryClip 的引用,即最新一次的剪下資料;
- OnPrimaryClipChangedListener 回撥只對剪下和複製操作有效,即只有剪下板資料增加時才呼叫 OnPrimaryClipChangedListener;
- 剪下板上有多個 ClipData 構成,每次剪下和複製事件都會產生一個 ClipData,ClipData 包含 ClipDescprition 和 若干個儲存資料的 ClipData.Item;
監聽剪下和複製事件,如果是文字則儲存對應文字:
private void registerClipEvents() {
final ClipboardManager manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
manager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged () {
if (manager.hasPrimaryClip() && manager.getPrimaryClip().getItemCount() > 0) {
CharSequence addedText = manager.getPrimaryClip().getItemAt(0).getText();
if (addedText != null) {
Log.d(TAG, "copied text: " + addedData);
}
}
}
});
}
注意,一定要在 onDestroy() 方法裡面去呼叫 addPrimaryClipChangedListener() 登出掉,否則會出現記憶體洩露。
方法二:EditText#onTextContextMenuItem
在該方法中,我們可以監聽到剪下、複製和貼上事件,但是需要繼承 EditText 重寫該方法:
public final class Listen2PasteEditText extends android.support.v7.widget.AppCompatEditText {
private static final String TAG = "Listen2PasteEditText";
private Context mContext;
public Listen2PasteEditText(Context context) {
super(context);
mContext = context;
}
public Listen2PasteEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
@Override
public boolean onTextContextMenuItem(int id) {
switch (id) {
case android.R.id.cut:
if (mContext instanceof IClipCallback) {
((IClipCallback) mContext).onCut(null);
break;
case android.R.id.copy:
if (mContext instanceof IClipCallback) {
((IClipCallback) mContext).onCopy(null);
break;
case android.R.id.paste:
if (mContext instanceof IClipCallback) {
((IClipCallback) mContext).onPaste(null);
}
}
return super.onTextContextMenuItem(id);
}
}
其中,IClipCallback 是個介面, Listen2PasteEditText 所在的 Activity 需要實現該介面。
IClipCallback 宣告如下:
public interface IClipCallback {
void onCut(Object o);
void onCopy(Object o);
void onPaste(Object o);
}
注意,上述程式碼只是讓我們監聽到了剪下和複製事件,要想獲取文字,還是要藉助剪下板,具體見 registerClipEvents() 方法,此處不再贅述。
貼上
剪下板無法監聽到貼上事件,只能通過 EditText#onTextContextMenuItem() 方法實現。
至於得到貼上文字,還是需要通過剪下板獲得。
具體程式碼見方法二。
相關推薦
安卓監聽剪下複製貼上事件例項
本文的剪下複製貼上事件只針對文字,URI 和 intent 不在討論範圍內。 例項程式碼實現了2個功能: 監聽剪下複製貼上事件; 獲取剪下複製或貼上的文字; 剪下複製 有2個方法監聽剪下複製事件:剪下板和 EditText 的 onText
安卓監聽和修改軟鍵盤右下角按鈕
前言:監聽軟鍵盤右下角按鈕在我們開發中經常遇到,下面我來說一下如何針對軟鍵盤右下角來進行操作。 監聽軟鍵盤右下角的按鈕很簡單,只需要重寫Activity中的dispatchKeyEvent(KeyEvent event)方法就好,比如想按右下角按鈕讓他消失。
安卓 監聽網路視訊播放 卡頓
有兩種方式設定視訊監聽卡: 一、系統自帶的監聽卡物件 在視訊播放中,如果播放網路視訊出現卡頓,需要對卡頓的情況做出處理:監聽卡 在安卓4.2以後,MediaPlayer.OnInfoListener類用來監聽視訊的卡頓,並且將監聽卡封裝在了VideoView中,通過: v
Java實現剪下複製貼上功能(含不同文字域的判斷)
通過焦點事件判斷不同的文字域 不同文字域焦點事件的處理 tp1.addFocusListener(new FocusListener(){ @Override public void focu
如何阻止複製剪下和貼上事件
在一些應用中,有時我們提交表單內容如(密碼)重要資訊時,為了安全,需要阻止一些複製剪下和貼上事件,今天做了一個簡單的例子有關阻止複製剪下和貼上事件: <!DOCT
angular輸入框內容複製、剪下、貼上事件觸發
<!doctype html> <html ng-app="myApp1"> <head> <meta charset="UTF-8">
Linux檔案剪下複製貼上
在home目錄下有wwwroot目錄,wwwroot下有sinozzz目錄,即/home/wwwroot/sinozzz 一、目錄建立 在/home/wwwroot目錄下新建一個sinozzz123的資料夾 mkdir /home/wwwroot/sinozzz12
安卓監聽鍵盤的開啟和關閉
看到網上說很多的偶去鍵盤狀態都是通過ViewTreeObserver.OnGlobalLayoutListener的onGlobalLayout來獲取變化的高度值通過差值來判斷獲取的。 但是實用性比較
安卓專案實戰之:安卓7.0優化下的全域性網路連線狀態監聽
須知:Android7.0起網路變化監聽隱式廣播被關閉 在 Android 7.0 版本中除了提供諸多多視窗支援、活動通知、後臺優化、訊息傳遞服務和Vulkan 等新特性和功能外,還對系統和 API 行為做出了各種變更,其中最重要的一點:Android7.0為了進行後臺的優化刪除了三
C# 複製、剪下、貼上
1、複製,文字框中選定內容到剪下板: Clipboard.SetDataObject(textBox1.SelectedText); 2、剪下,文字框中當前選中的內容 textBox1.Cut(); 3、貼上,至文字框中 textBox1.Text = (
修改Delphi 10.1.2 edit控制元件在android的複製、剪下和貼上樣式
Delphi 10.1.2 edit控制元件在android預設的複製、剪下和貼上樣式太醜,經悟能-DelphiTeacher的提示,用最簡單的程式碼修改後稍有改觀。 預設的樣式: 修改後的樣式: 修改FMX.Platform.Android.pas 找到procedure TWindowMa
Js實現——右鍵出現選單,選單中有新建,複製,剪下,貼上,刪除
描述: 單擊右鍵出現選單,選單中有新建,複製,剪下,貼上,刪除 選擇新建時,建立第一個div,寬高50,顏色隨機,並且放在滑鼠點選的位置 點選div,div被選中,加邊線,如果被選中,div可以被拖動,當選擇別的d
Selenium+Python測試鍵盤操作---全選、複製、剪下、貼上
''' 鍵盤操作--將百度搜索的關鍵字複製到必應中進行搜尋 --匯入模組from selenium.webdriver.common.keys import Keys --剪下 --複製 ''' from selenium import webdriver from sele
完整版文本框即時輸入數據監聽並下拉顯示匹配數據
utl 監聽 title 本地 pre utf splay chang ace 1.前言 好多小童鞋,對以jq為主的前端並不是特別熟悉,但並不代表你是菜鳥,說不定你是其他方面的資深老司機,好吧,我才是菜鳥,今天主要寫一個完整的demo來看看怎樣文本框+下拉框即時匹配數據。
ubuntu在終端下複製貼上的2種方法
最近因為專案需要在ubuntu環境下開發(我是用的unbantu虛擬環境),經常要在終端下手動輸入很長的檔案路徑,覺得很麻煩,就谷歌了2種方法如下 你可能會問,什麼是ubuntu? 簡單來說就是一個基於Linux系統的開源桌面作業系統 詳情:https://bai
安卓4g網絡下訪問特別慢 APN為ipv4的時候可以訪問IPV6不可以訪問
獲得 2種 鏈接 follow 原來 不可 線上 域名解析 分別是 經過對比發現,TCP3次握手的過程沒有問題,不是重發導致的!但是在3次握手前停滯了16s,這很奇怪!不經想問,3次握手前做了什麽!由於個人水平有限,猜測是不是域名解析的問題呢!和後臺交流一下!發現公司線上服
各大android應用商店的展示權重 安卓應用商店關鍵詞+下載量+評價+其他這幾項佔的權重(僅供參考)
1、360手機助手 2、應用寶 應用寶權重最高的是評論,評論方面主要從評論質量與評論數量上下手,其它方面權重值較低,對APP排名影響度不大。 3、百度手機助手 在我對你百度手機助手的排名分析中,發現關鍵詞的權重很高,下載量等其它方面對其排名影響不大。而且這個市場的官方編輯可以直
從剪下板貼上圖片上傳
一個需求:讓使用者使用剪下板來貼上圖片(而不是將圖片儲存到本地,然後再選取檔案上傳) fakepath是什麼鬼 今天做圖片上傳時發現,不論是什麼路徑上傳的檔案,路徑都變成了這種格式 “C:\fakepath\檔名”。 以前做圖片上傳時沒留意過這個f
Linux下複製貼上快捷鍵
1. 在終端下: 複製命令:Ctrl + Shift + C 組合鍵. 貼上命令:Ctrl + Shift + V 組合鍵. 2. 在控制檯下: 複製命令:Ctrl + Insert 組合鍵
Xshell下複製貼上的快捷鍵設定
在Xshell下,設定了複製粘貼後,可以非常方便快捷地完成操作。下面是設定的步驟: 彈出框,選擇滑鼠和鍵盤選項如圖: 滑鼠按鈕依據習慣選擇,Paste the clipboard contenets. 將選擇區內的“將待定的文字自動複製到剪貼簿”前