2016-03-08 7 views
1

Я новичок в разработке Android, я создаю приложения для хранения выбранного содержимого веб-страниц в базе данных sqlite. Когда пользователь выбирает слово, пользовательская панель контекстного действия будет отображаться в веб-просмотре. И теперь мне нужно получить выбранное слово в WebView. Любая идея о том, как получить выбранное слово в WebView и вернуть его как String?Android Webview: как скопировать выделенный текст в webview.

Благодаря

ответ

2

Единственный способ получить выбранный текст из 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

+0

Спасибо за Ваш ответ. Я использую тот же метод webview.evaluateJavascript ("(function() {return window.getSelection(). ToString()})()" раньше. Но когда я отлаживаю и значение String возвращает null. –

+0

@JackChan вы тестировали с помощью API> = 19 check? –

+0

yaya, я тестировал с API 22. Я отлаживаю и получаю значение String. Это нулевое значение –