[轉]WebView長按彈出復制粘貼

ActionMode簡介

ActionMode是android3.0之后出現的一種菜單選擇模式

ActionMode的創建

ActionMode的使用特別的簡單,主要用到兩個方法,startActionMode和ActionMode.Callback(),startActionMode:開啟我們的菜單,ActionMode.Callback方法中主要有四個方法,詳情和介紹看下面的代碼:

ActionMode.Callback mCallback=new ActionMode.Callback(){/*** 創建菜單的樣式,返回true說明創建成功* @param actionMode* @param menu* @return*/@Overridepublic boolean onCreateActionMode(ActionMode actionMode, Menu menu) {MenuInflater menuInflater = actionMode.getMenuInflater();menuInflater.inflate(R.menu.action_mode,menu);return true;}@Overridepublic boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {return false;}/*** 當ActionMode的條目被點擊的時候,調用這個方法* @param actionMode* @param menuItem* @return*/@Overridepublic boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {return false;}/*** 當ActionMode被銷毀的時候調用* @param actionMode*/@Overridepublic void onDestroyActionMode(ActionMode actionMode) {if(actionMode!=null){actionMode.finish();}}};

?

然后

?

通過startActionMode(mCallback);方法調用就可以了,就是這么簡單

ActionMode遇到的坑

當ActionMode和ToolBar一塊使用的時候,心情就不是那么的愉快了...,我們會看到下面的效果

Toolbar被擠壓下去了,是不是感覺安卓太坑了...

?

不用著急,我們還是有解決辦法滴,我們要確保幾件事情:

(1)我們的Activity繼承AppCompatActivity

(2)設置主題,保證我們的ActionMode顯示在Toolbar上面

<item name="windowActionModeOverlay">true</item>
此外我們可以在主題當中設置我們的ActionMode的樣式(高度,背景顏色,logo等)
<style name="actionModeStyle" ><!--設置AcitonMode的背景顏色--><item name="background">@color/color_999999</item><item name="backgroundSplit">?attr/actionModeSplitBackground</item><!--設置ActionMode的高度--><item name="height">64dp</item><item name="titleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Title</item><item name="subtitleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle</item><!--設置ActionMode的左邊圖標--><item name="closeItemLayout">@layout/abc_action_mode_close_item_material</item></style>

WebView中的ActionMode(實現長按復制文本的功能)

ActionMode在webview上面,Android6.0之前和之后發生了一些變化,6.0之后的更加友好

Android6.0之前的樣式就是我們上圖那幅圖片所展示的

?

實現自定義ActionMode

繼承WebView,重寫startActionMode方法,攔截我們的ActionMode對象,然后對此進行一些處理就可以了,直接上代碼

@Overridepublic ActionMode startActionMode(ActionMode.Callback callback) {ActionMode actionMode = super.startActionMode(callback);return resolveMode(actionMode);}@Overridepublic ActionMode startActionMode(ActionMode.Callback callback, int type) {ActionMode actionMode = super.startActionMode(callback, type);return resolveMode(actionMode);}public ActionMode resolveMode(ActionMode actionMode) {if(actionMode!=null){final Menu menu = actionMode.getMenu();menu.clear();for (int i = 0; i < title.length; i++) {menu.add(title[i]);}for (int i = 0; i < title.length; i++) {MenuItem item = menu.getItem(i);item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem menuItem) {String title = menuItem.getTitle().toString();getSelectedData(title); //獲取選中的h5頁面的文本releaseActionMode();return true;}});}this.mActionMode = actionMode;}return actionMode;}

當點擊ActionMode的item的之后,將我們的actionMode finish掉

 public void releaseActionMode() {if (mActionMode != null) {mActionMode.finish();mActionMode = null;}}

獲取h5頁面的文本信息

獲取h5頁面的文本信息,需要使用到js方法來幫助我們實現這些功能,然后在通過js和java交互回傳我們的文本內容(js和java如何交互,這里就不多說了......)

/*** 點擊的時候,獲取網頁中選擇的文本,回掉到原生中的js接口* @param title 傳入點擊的item文本,一起通過js返回給原生接口*/private void getSelectedData(String title) {String js = "(function getSelectedText() {" +"var txt;" +"var title = \"" + title + "\";" +"if (window.getSelection) {" +"txt = window.getSelection().toString();" +"} else if (window.document.getSelection) {" +"txt = window.document.getSelection().toString();" +"} else if (window.document.selection) {" +"txt = window.document.selection.createRange().text;" +"}" +"ActionModeJavaScript.callback(txt,title);" +           //回調java方法將js獲取的結果傳遞過去"})()";if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  //android系統4.4以上的時候調用js方法用這個evaluateJavascript("javascript:" + js, null);} else {loadUrl("javascript:" + js);}}

源碼

參考文章:

?

http://blog.csdn.net/evan_man/article/details/51685022

http://blog.csdn.net/u012336923/article/details/50865120#%E6%80%BB%E7%BB%93

https://stackoverflow.com/questions/26483778/display-actionmode-over-toolbar

?


---------------------
作者:彼岸人生
來源:CSDN
原文:https://blog.csdn.net/kemeng7758/article/details/77869113?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285022.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285022.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285022.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深夜爆肝:萬字長文3種語言實現Huffman樹(強烈建議三連)

文章目錄一、C語言能干大事1. C語言下Huffman樹的計算過程分析2. C語言下Huffman樹的編程二、C#語言也不賴1. C#下Huffman類的設計2. C#中界面設計3. 建立測試數據并顯示Huffman樹4. 輸入任意一組數據&#xff0c;完成構造Huffman樹三、JavaScript語言不愛聽了1. JavaScript下H…

C語言試題179之實現堆排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現堆…

SQL Server Update 所有表的某一列(列名相同,類型相同)數值

DECLARE sql VARCHAR(5000); WITH T AS (SELECT SchemaName c.TABLE_SCHEMA,TableName c.TABLE_NAME,ColumnName c.COLUMN_NAME,DataType DATA_TYPE,sql update c.TABLE_NAME set c.COLUMN_NAME 2017-11-20 -----------執行語句FROM INFORMATION_SCHEMA.COLUMNS …

C語言試題180之實現實現字符串strcpy函數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現字…

[轉]關于數據中臺、數據平臺、數據倉庫、數據湖等數據概念的對比解析

前言 2010年左右&#xff0c;還是在上學的時候&#xff0c;學過一門課程叫《數據倉庫與數據挖掘》&#xff0c;那還是屬于傳統數據的時代&#xff0c;我們會討論什么是數據倉庫&#xff1f;什么是數據集市&#xff1f;數據倉庫和數據庫有什么區別&#xff1f;等等&#xff0c;…

【微服務專題之】.Net6下集成消息隊列-RabbitMQ交換機模式代碼演示(全)

微信公眾號&#xff1a;趣編程ACE關注可了解更多的.NET日常實戰開發技巧&#xff0c;如需源碼 請公眾號后臺留言 源碼;[如果覺得本公眾號對您有幫助&#xff0c;歡迎關注].Net中RabbitMQ中交換機模式的使用前文回顧【微服務專題之】.Net6下集成消息隊列上-RabbitMQ【微服務專題…

【專升本計算機】甘肅省專升本計算機基礎--判斷題--匯編(737道帶答案)

馮?諾依曼原理是計算機的唯一工作原理。(  )計算機能直接識別匯編語言程序。(  )計算機能直接執行高級語言源程序。(  )計算機掉電后,ROM中的信息會丟失。(  )計算機掉電后,外存中的信息會丟失。( √ )應用軟件的作用是擴大計算機的存儲容量。(  )操…

thinkphp中表有前綴名的時候申明模板的方法

$Modelnew \Home\Model\Stu_activityModel; $ModelD(Stu_activity);//錯誤的聲明不了轉載于:https://www.cnblogs.com/jianxin-lilang/p/6242416.html

OK335xS psplash make-image-header.sh hacking

/****************************************************************************** OK335xS psplash make-image-header.sh hacking* 說明&#xff1a;* 移植的時候想知道移植psplash中./make-image-header.sh Screenshot.png POKY* 最后的POKY為什么要指定&am…

SDWebImage 4 0 遷移指南

剛剛更新pods 編譯程序,突然發現SDWebImage報錯 了解到SDWebImage4.0 更換了不少方法&#xff0c;還增加了幾個類&#xff0c;索性都研究一下pod 更新SDWebImage版本為4.1.0 查找是否有對應緩存的 方法 由返回BOOL 值 換成Block回調中參數返回BOOL值 //老版本 BOOL isInCache …

C語言試題181之實現strcat函數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現st…

通宵爆肝:C語言下的平衡二叉樹(Avl)原來如此簡單!

文章目錄平衡二叉樹的構造過程1 算法描述平衡二叉樹的編程1 樹上結點的高度計算2 LL調整函數3 RR調整函數4 LR調整函數5 RL調整函數6 根據結點的值、動態構造平衡二叉樹平衡二叉樹的構造過程 對一個查找問題而言&#xff0c;查找表的存儲結構、應該組織成二叉樹結構。而把一個…

[轉]定了!2020年,6種將死的編程語言!

隨著年度復工大戲的開播&#xff0c;編程界語言排行榜又要面臨一次全新的洗牌&#xff0c;六大編程語言將要黃了&#xff01;此消息一出&#xff0c;令眾多程序員心碎&#xff01;那么這將“亡”的六大語言中有你所擅長的嗎&#xff1f; Perl 曾幾何時&#xff0c;幾乎每個人都…

Java研發方向如何準備BAT技術面試答案(上)

http://blog.csdn.net/q979392157/article/details/52164319 阿里面試題總結 http://blog.csdn.net/q979392157/article/details/52173812 JAVA多線程和并發基礎 http://blog.csdn.net/q979392157/article/details/52104466 轉載于:https://www.cnblogs.com/Berryxiong/p/6…

正式發布丨AKS上的Dapr、ML、Gitops擴展

點擊上方藍字關注我們&#xff08;本文閱讀時間&#xff1a;5分鐘)我們很高興地宣布在 Azure Kubernetes? Service&#xff08;以下簡稱AKS&#xff09;上啟用的 Dapr、Azure 機器學習和 GitOps 三項新功能正式發布&#xff0c;可以通過稱為“集群擴展”的功能在 AKS 集群上啟…

【BZOJ3036】綠豆蛙的歸宿 概率DP

鏈接&#xff1a; #include <stdio.h> int main() {puts("轉載請注明出處[輾轉山河弋流歌 by 空灰冰魂]謝謝");puts("網址&#xff1a;blog.csdn.net/vmurder/article/details/46467217"); } 題解&#xff1a; 呃。拓撲圖上從后往前掃就好了Qwq 代碼…

C語言試題182之統計一串字符包含the的個數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 統計一…

Mac上怎么把mov文件轉成gif文件

前言 在github上&#xff0c;我們發現很多開源庫的readme里都有gif文件&#xff0c;平時聊天我們也發現經常有些小伙伴發一些自制的gif文件。怎么把mov&#xff0c;MP4等其他格式的文件轉為gif文件呢&#xff1f;網上有很多介紹各種軟件的&#xff0c;大家可以隨便Google一下&a…

[轉]nginx反向代理網站(網易、百度之類的)

使用nginx反向代理百度之類的網站和反向代理自己發布的服務設置上有點差別&#xff0c;因為此差別費時良久&#xff0c;故記錄在此。 使用include 配置文件方式&#xff0c; 首先在 nginx.conf文件的 http 中 加入&#xff0c; include /etc/nginx/proxy34.conf;p…

【ArcGIS Pro微課1000例】0013:NOAA全球1km分辨率DEM下載及拼接教程(附已拼接成果下載地址)

文章目錄 一、全球1km分辨率DEM拼接成果介紹二、全球1km分辨率DEM原始數據下載三、全球1km分辨率DEM處理拼接流程四、全球1km分辨率DEM下載地址一、全球1km分辨率DEM拼接成果介紹 在ArcGIS Pro中加載拼接好的全球1km分辨率DEM數據集,如下圖所示: 三維顯示: 柵格源信息如下:…