日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]WebView长按弹出复制粘贴

發布時間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]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
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的[转]WebView长按弹出复制粘贴的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。