我正在使用webview开发Web浏览器。 (Android API等级21)
我的目标是当用户在webView中复制某些文本时,获取该文本值并进行更改。
我使用了剪贴板更改事件列表器,因此当事件侦听器捕获复制事件时,getPrimaryClip,更改剪辑数据和setPrimaryClip正在处理。
但是,事件监听器仍处于活动状态,因此在调用setPrimaryClip之后,会一次又一次地调用此进程...
我怎样才能控制一次?
或者您可以建议其他事件监听器吗?
修改 我引用了this - >制作自定义上下文操作栏。
使用DevTest教授的JavaScript代码(回答这个问题),我成功实现了目标。
答案 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: