Android - 突出显示WebView中的单词/短语

时间:2012-01-31 07:50:59

标签: android

我想从Webview中选择Text,然后突出显示该单词的选定显示。有人有想法吗?使用javascript不起作用,因为getSelection函数在android webview上没有返回任何内容。

请帮忙。

3 个答案:

答案 0 :(得分:0)

你有没有看过:

mainpage.showFindDialog("Alice", true);

其中主页是WebView ...

这将在webview上方弹出一个输入文本的栏 - 然后突出显示文本的第一个匹配项。有箭头跳到下一个等等......

除非你的意思是你想突出某些词 - 并让它们保持这种状态 - 那么你需要注入一些javascript来做一个突出显示功能。

答案 1 :(得分:0)

据我所知,您无法在桌面浏览器上(使用鼠标)选择Android触控设备上的文字。

似乎在Android设备上选择文本的方式只能复制到剪贴板或由本机“共享”应用程序使用。

选择text =>将其复制到Clipboard =>使用ClipboardManager取回它。

我可能不像你希望的那样简单和流畅,但也许它会为你效劳:)

获得所选文本的值后,您可以随时将其传递给在html中搜索/替换它的javascript函数,并通过向其添加/填充一些html来突出显示它。

链接到ClipboardManager。 http://developer.android.com/reference/android/text/ClipboardManager.html

以下是使用鼠标在常规桌面浏览器上获取所选文本的演示:

http://bit.ly/AwggX9

尝试在Android设备上运行相同的操作。文本选择的工作方式不同。我猜它是处理选择的共享/剪贴板管理器,而不是浏览器本身。

祝你好运,希望你找到一个有效的解决方案,并乐于听到它。

答案 2 :(得分:0)

以下代码会将您的文本复制到剪贴板,然后从剪贴板中获取文本并进行搜索..

 private void emulateShiftHeld(WebView view)
 {
     try
     {
         KeyEvent shiftPressEvent = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN,
                                                 KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0);
         shiftPressEvent.dispatch(view);

     }
     catch (Exception e)
     {
         Log.e("dd", "Exception in emulateShiftHeld()", e);
     }
 }

以下代码将突出显示您选择的文字......

ClipboardManager ClipMan = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipMan.setText(ClipMan.getText().toString());
wb.findAll(ClipMan.getText().toString());
try
{
    Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
    m.invoke(wb, true);
}
catch (Throwable ignored){}