国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android WebView自定義長(zhǎng)按選擇實(shí)現(xiàn)收藏/分享選中文本功能

2019-12-12 02:38:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

效果圖(1.3M)

一、前言

** 戳這里可以去DEMO,來(lái)吧 **

相信剛接觸android不久的同志們,在面對(duì)產(chǎn)品提出的 :

 “自定義WebView頁(yè)面中,長(zhǎng)按文本的彈出選項(xiàng)、點(diǎn)擊選擇后,分享、轉(zhuǎn)發(fā)、收藏選擇文本”

這樣的需求時(shí),第一反應(yīng)大部分是:這是系統(tǒng)行為,如果實(shí)現(xiàn)需要在web端實(shí)現(xiàn)。

但是web端實(shí)現(xiàn)的局限性太大,曾經(jīng)也有過(guò)監(jiān)聽(tīng)系統(tǒng)粘貼板,在用戶點(diǎn)擊復(fù)制的時(shí)候?qū)崿F(xiàn)其他的邏輯,但是這樣用戶體驗(yàn)不好,所以自定義WebView中長(zhǎng)按的彈出菜單,并在點(diǎn)擊時(shí)返回選中文本的小控件閃亮登場(chǎng)┏ (^ω^)=。

二、自定義長(zhǎng)按彈出菜單

這一步實(shí)現(xiàn)其實(shí)很簡(jiǎn)單,首先創(chuàng)建一個(gè)CustomActionWebView繼承系統(tǒng)WebView,然后重寫下面兩個(gè)方法。

這兩個(gè)方法會(huì)在用戶長(zhǎng)按選擇web文本時(shí),在彈出菜單前被調(diào)用。它們之間的區(qū)別在于,第一個(gè)方法的菜單彈出方式,指定了默認(rèn)的type。我們并不關(guān)心彈出的item類型是什么,我們只需要攔截下來(lái)ActionMode,然后返回我們自己的自定義ActionMode即可。

@Overridepublic ActionMode startActionMode(ActionMode.Callback callback) {  ActionMode actionMode = super.startActionMode(callback);  return resolveActionMode(actionMode);}@Overridepublic ActionMode startActionMode(ActionMode.Callback callback, int type)   ActionMode actionMode = super.startActionMode(callback, type);  return resolveActionMode(actionMode);}

這里我們所做的事是:

1、把原本的actionMode對(duì)象保存到mActionMode中。

2、清空原本actionMode中的MenuItem。

3、添加我們自定義的item到actionMode中。

4、重定義每個(gè)menuItem的點(diǎn)擊事件。

5、在點(diǎn)擊事件中通過(guò)執(zhí)行js,獲取選中文本。

6、通過(guò)上面保存的 mActionMode,釋放彈出菜單(不釋放會(huì)內(nèi)存泄漏)。

7、返回新填充的actionMode給系統(tǒng)。

/** * 處理item,處理點(diǎn)擊 * @param actionMode */private ActionMode resolveActionMode(ActionMode actionMode) {  if (actionMode != null) {    final Menu menu = actionMode.getMenu();    mActionMode = actionMode;    menu.clear();    for (int i = 0; i < mActionList.size(); i++) {      menu.add(mActionList.get(i));    }    for (int i = 0; i < menu.size(); i++) {      MenuItem menuItem = menu.getItem(i);      menuItem.setOnMenuItemClickListener(new Item.OnMenuItemClickListener() {        @Override        public boolean onMenuItemClick(MenuItem item) {          getSelectedData((String) item.getTitle());          releaseAction();          return true;        }      });    }  }  mActionMode = actionMode;  return actionMode;}

實(shí)現(xiàn)效果

三、獲取選中文本

光自定義菜單,拿不到選中文本也沒(méi)意義,那么如何獲取選中文本呢?這里如果不轉(zhuǎn)個(gè)彎,還真會(huì)在南墻在撞死( ̄^ ̄)

主站蜘蛛池模板: 嵊泗县| 临朐县| 巴南区| 同江市| 洛宁县| 德昌县| 株洲市| 镇坪县| 遵义县| 乐都县| 房产| 陇川县| 德江县| 太湖县| 南丰县| 玉环县| 米脂县| 大庆市| 综艺| 崇文区| 黄平县| 卓尼县| 乐陵市| 寻乌县| 贵港市| 元氏县| 明星| 惠水县| 宁德市| 平遥县| 富宁县| 天长市| 汉阴县| 通化县| 新津县| 昔阳县| 探索| 赤城县| 江津市| 昌黎县| 荥经县|