Android 3.x仅限WebView文本选择+ JavaScript

Dan*_*Dan 11 javascript android textselection webview android-3.0-honeycomb

问题域:基于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.

这些是我看到的选项,希望我对此的接近和挫败感使我对一个更简单(读内置)解决方案的看法变得模糊不清.

感谢你的宝贵时间.

smo*_*ter 11

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

  • @btate上面的github项目不适用于操作系统版本4.1 +. (3认同)

smo*_*ter 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();
 }
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助

编辑:这不适用于 3.1+