问题域:基于Android WebView的ePub格式阅读器 -
我们需要可以通过JavaScript方法访问的文本高亮显示(例如,启用它们,关闭它们,保存它们给它们发送电子邮件等)
知道的任何人,如果我错了,请纠正我:
在WebView上选择文本期间 -
基本上我们交给一个TextView覆盖(WebTextView),除了可视化之外没有附加到底层html(很好地将它全部排成一行并使其无缝,顺便说一句),我们在其上执行TextSelectionActionMode并提供ClipboardManager结果......为了清楚起见,在此库存过程中,实际上并未实际选择带有WebView的实际HTML,这就是JavaScript无法访问操作结果的原因。
因此,为了使这种行为在3.1+中运行,我有一些可能的计划继续在WebView上实现我自己的选择 - 这是我想知道我是否看不到我的角落的部分:) - -
1)捕获MOTION_DOWN的长按,启动选择模式,覆盖内置的TextSelection ActionMode(以提供客户品牌 - 我发现这样做的方式是如此hackish它伤害)观看拖动,捕获MOTION_UP位置,映射这些co to
WebView,并根据coords进行选择(同时将文本与ClipboardManager捕获的文本进行比较)
2)创建我自己的“WebTextView”(整个lotta工作大声笑)并且不那么 - hackishly创建我自己的ActionMode并完成上述所有操作。
3)使用由库存选择过程生成的MotionEvent,并以某种方式覆盖由此触发的库存TextSelection ActionMode。
这些是我看到的选项,希望我的接近和沮丧
有了这个让我变得更加简单(读作内置)
一两个解决方案。
感谢你的宝贵时间。
我的工作在2.2 - 4.0.3。我使用了一个javascript界面并将所有触摸传递给它。解决方案似乎工作得很好,我在github上放了一个示例项目。 github项目包括assets文件夹中必需的js以及加载测试页面并实现处理选择所需的所有必要方法的测试页面和Web视图。 github项目的链接是 https://github.com/btate/BTAndroidWebViewSelection。有它。
我的工作在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+