Единственный способ получить выбранный текст из WebView
основан на JavaScript. Это не относится к режиму действия, так как WebView
выбор текста должен быть получен в соответствии с точкой зрения разработчиков WebView
. Они сознательно решили не предоставлять API для доступа к выбору текста с Java.
Решение включает в себя 2 подхода.
С 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);
}
});
На старых строит ваш единственный курорт является пользовательский Javascript интерфейс с одним методом принятия String, который вы должны позвонить через 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);
}
}
Reference:
How to get the selected text of webview in ActionMode override
Спасибо за Ваш ответ. Я использую тот же метод webview.evaluateJavascript ("(function() {return window.getSelection(). ToString()})()" раньше. Но когда я отлаживаю и значение String возвращает null. –
@JackChan вы тестировали с помощью API> = 19 check? –
yaya, я тестировал с API 22. Я отлаживаю и получаю значение String. Это нулевое значение –