簡體   English   中英

Android 3.x僅限WebView文本選擇+ JavaScript

[英]Android 3.x ONLY WebView Text Selection + JavaScript

問題域:基於Android WebView的ePub格式閱讀器 -

我們需要可以通過JavaScript方法訪問的文本高亮(例如,打開它們,關閉它們,保存它們給它們發送電子郵件等)

知道的任何人,如果我錯了,請糾正我:在WebView上選擇文本時 -

基本上我們交給一個TextView覆蓋(WebTextView),除了可視化之外沒有附加到底層的html(很好地將它全部排成一行並使其無縫,順便說一句),我們在其上執行TextSelectionActionMode並提供ClipboardManager結果......為了清楚起見,在此庫存過程中,實際上並未實際選擇帶有WebView的實際HTML,這就是JavaScript無法訪問操作結果的原因。

所以為了使這個行為在3.1+中工作,我有一些可能的計划繼續在WebView上實現我自己的選擇 - 這是我想知道我是否看不到我的角落的部分:) - -

1)捕獲MOTION_DOWN的長按,啟動選擇模式,覆蓋內置的TextSelection ActionMode(以提供客戶品牌 - 我發現這樣做的方式是如此hackish它傷害)觀看拖動,捕獲MOTION_UP位置,映射這些coords到WebView上,並根據coords進行選擇(同時將文本與ClipboardManager捕獲的文本進行比較)

2)創建我自己的“WebTextView”(整個lotta工作大聲笑),並且不那么 - hackishly創建我自己的ActionMode並完成上述所有操作。

3)使用股票選擇過程生成的MotionEvents,並以某種方式覆蓋由此觸發的股票TextSelection ActionMode。

這些是我看到的選項,希望我對此的接近和挫敗感使我對一個更簡單(讀內置)解決方案的看法變得模糊不清。

感謝你的寶貴時間。

我的工作在2.2 - 4.0.3。 我使用了一個javascript界面​​並將所有觸摸傳遞給它。 解決方案似乎工作得很好,我在github上放了一個示例項目。 github項目包括assets文件夾中必需的js以及加載測試頁面並實現處理選擇所需的所有必要方法的測試頁面和Web視圖。 github項目的鏈接是https://github.com/btate/BTAndroidWebViewSelection 有它。

我不是100%確定哪些方法/屬性可以為您提供范圍和選擇。 我在文檔中沒有看到任何內容。 但我能夠使用反射以像素為單位獲得所選范圍。 不確定這是否有助於任何人,但認為值得發布在這里。

Region result = null;
try {
     Object[] params = null;

     Method nativeGetSelectionRegion = WebView.class.getDeclaredMethod("nativeGetSelectionRegion");
     nativeGetSelectionRegion.setAccessible(true);     
     result = (Region)nativeGetSelectionRegion.invoke(this, params);


     Log.i(TAG, "res: region " + result.getBounds().toShortString());

 } catch (Exception e) {
     e.printStackTrace();
 }

希望這有助於某人

編輯:這不適用於3.1+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM