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

时间:2011-08-04 21:00:11

标签: javascript android webview android-3.0-honeycomb textselection

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

我们需要可以通过JavaScript方法访问的文本高亮显示(例如打开电子邮件,关闭电子邮件,保存电子邮件等等)

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

基本上我们交给一个TextView覆盖(WebTextView),除了可视化之外没有附加到底层html(很好地将它全部排成一行并使其无缝,顺便说一句),我们在其上执行TextSelectionActionMode和ClipboardManager提供了结果...为了清楚起见,在此库存过程中,实际上并未实际选择带有WebView IS的实际HTML,这就是JavaScript无法访问操作结果的原因。

所以为了让这个行为在3.1+中运行,我有一些可能的计划可以在WebView上实现我自己的选择 - 这就是我想知道我是否看不到我的角落的部分:) -

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

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

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

这些是我看到的选项,希望我的接近和沮丧 有了这个让我变得更加简单(看作是内置的) 一两个解决方案。

再次感谢您的时间。

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:1)

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