android webview - 剪贴板更改时更改剪贴板数据

时间:2016-03-21 05:22:08

标签: android webview event-listener

我正在使用webview开发Web浏览器。 (Android API等级21)

我的目标是当用户在webView中复制某些文本时,获取该文本值并进行更改。

我使用了剪贴板更改事件列表器,因此当事件侦听器捕获复制事件时,getPrimaryClip,更改剪辑数据和setPrimaryClip正在处理。

但是,事件监听器仍处于活动状态,因此在调用setPrimaryClip之后,会一次又一次地调用此进程...

我怎样才能控制一次?

或者您可以建议其他事件监听器吗?

修改 我引用了this - >制作自定义上下文操作栏。

使用DevTest教授的JavaScript代码(回答这个问题),我成功实现了目标。

1 个答案:

答案 0 :(得分:1)

WebView获取文本的唯一方法是基于javascript。这不是特定于操作模式,这是根据WebView开发人员应该检索WebView文本选择的方式。观点看法。他们故意决定不提供API来访问Java中的文本选择。

解决方案包括两种方法。

使用Android API> = 19,您可以使用evaluateJavascript

webview.evaluateJavascript("(function(){return window.getSelection().toString()})()",
new ValueCallback<String>()
{
    @Override
    public void onReceiveValue(String value)
    {
        Log.v(TAG, "SELECTION:" + value);
    }
});

在较旧的版本中,您唯一的选择是使用单个方法接受String的自定义javascript界面​​,您应该通过webview.loadUrl调用它来传递相同的内容:

webview.loadUrl("javascript:js.callback(window.getSelection().toString())");

其中js是附加的javascript界面​​:

webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(new WebAppInterface(), "js");

public class WebAppInterface
{
    @JavascriptInterface
    public void callback(String value)
    {
        Log.v(TAG, "SELECTION:" + value);
    }
}

来自Here

的回答

更新:

要修改和复制数据(作为评论),请将所选值存储在成员变量中,例如&#34; Seleted_Value&#34;当点击复制按钮(处理动作模式 - 搜索自定义动作模式)时,修改&#34; Selected_Value&#34;变量并使用以下方法复制到剪贴板:

ClipboardManager clipboard = (ClipboardManager)
        getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("simple text",Selected_Value); 
clipboard.setPrimaryClip(clip);

详情here