通过上下文操作栏在WebView中获取所选文本

时间:2012-01-13 19:48:21

标签: android webview android-actionbar android-4.0-ice-cream-sandwich

已知difficult可以在WebView中获取所选文本,因为WebView文本选择实际上是由私有类WebTextView处理的。

然而,随着最近发布的Android 4.0 Design guidelines,通过上下文操作栏(CAB)实现这一目标似乎有一线希望。它says

  

只要您允许用户通过长按选择数据,请使用CAB。您可以控制CAB的操作内容,以插入您希望用户能够执行的操作。

我误解了这个吗? 有没有办法通过CAB从W​​ebView检索所选文本?

经过长时间点击和文字选择模式开始后,我现在可以检测ActionMode何时开始并修改原始复制/粘贴Menu;但是,我无法弄清楚如何实际检索所选文本。

3 个答案:

答案 0 :(得分:8)

使用当前的API无法做到这一点。

我已为此提交了功能请求 - 问题24841:WebView应允许应用程序提供自定义上下文操作栏http://code.google.com/p/android/issues/detail?id=24841

基本上,4.0中的WebView已经硬编码了自己的上下文操作栏(CAB)。该CAB具有对WebView的引用,并且通过该引用,它可以获取所选文本。我不确定你是如何检测ActionMode启动和修改菜单的,但是如果你能够完成所有这些操作,那么你就会陷入困境,因为getSelection()目前是包私有的。我将其作为一个单独的问题提交,并将其与上一个问题相关联。

答案 1 :(得分:0)

您可以使用javascript获取所选文本:window.getSelection(),并使用WebView的addJavascriptInterface函数返回结果。

答案 2 :(得分:0)

感谢您的信息,我已经解决了一个难题。 我只想在actionmode中添加一些功能。 以下是我的代码,可能对其他人有帮助。

@Override
public ActionMode onWindowStartingActionMode(Callback callback) {
    // TODO Auto-generated method stub
    ActionMode mode = super.onWindowStartingActionMode(callback);
    mode.getMenuInflater().inflate(R.menu.actions, mode.getMenu());
    mode.getMenu().findItem(R.id.action_add).setOnMenuItemClickListener(new OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // TODO Auto-generated method stub
            Log.i("", "onMenuItemClick add ");
            return false;
        }
    });
    return mode;
}