10

问题域:基于Android WebView的ePub格式阅读器——

我们需要可通过 JavaScript 方法访问的文本高亮显示(即打开 em、关闭 em、保存它们并通过电子邮件发送等)

任何知道的人,如果我错了,请纠正我:在 WebView 上的文本选择期间——

基本上,我们得到了一个 TextView 叠加层(WebTextView),除了视觉上之外,它绝不会附加到底层 html 上(顺便说一句,将它全部对齐并使其无缝),我们在其上执行 TextSelectionActionMode 并提供 ClipboardManager结果...为了清楚起见,在此库存过程中的任何时候都没有实际选择带有 WebView 的实际 HTML,这就是 JavaScript 无法访问操作结果的原因。

因此,为了使这种行为在 3.1+ 中起作用,我有一些可能的计划来在 WebView 上实现我自己的选择——这是我想知道我是否看不到角落的部分:)—— -

1)捕获启动选择模式的长按的MOTION_DOWN,覆盖内置的TextSelection ActionMode(以提供客户品牌-我发现这样做的方式太糟糕了)观看拖动,捕获MOTION_UP位置,映射这些坐标到 WebView 上,并根据坐标进行选择(同时将文本与 ClipboardManager 捕获的文本进行比较)

2)创建我自己的“WebTextView”(整个工作大声笑)并且不那么-hackishly创建我自己的ActionMode并执行上述所有操作。

3) 使用股票选择过程生成的 MotionEvents 并以某种方式覆盖由此触发的股票 TextSelection ActionMode。

这些是我看到的选项,希望我对此的接近和挫败感使我对一个或两个更简单(读为内置)解决方案视而不见。

感谢你的宝贵时间。

4

2 回答 2

12

我在 2.2 - 4.0.3 中得到了这个工作。我使用了一个 javascript 界面并将所有内容传递给它。该解决方案似乎运行良好,我在 github 上放了一个示例项目。github 项目在 assets 文件夹中包含必要的 js,以及一个测试页面和 Web 视图,用于加载测试页面并实现所有必要的方法来处理选择。github 项目的链接是https://github.com/btate/BTAndroidWebViewSelection。有它。

于 2012-07-06T18:46:40.177 回答
2

我不是 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+

于 2012-04-09T14:57:39.203 回答