Chan Yoong Hon
Chan Yoong Hon

Reputation: 1812

Android Webview : How to copy selected text in webview.

I am new in android development, I am create an apps to store selected webview content into sqlite database. When user select of word, custom contextual action bar will display in webview. And now I need to get selected word in WebView. Any idea on how to get selected word in WebView and return as String?

Thanks

Upvotes: 2

Views: 2529

Answers (1)

Android Geek
Android Geek

Reputation: 9225

The only way to get text selection from a WebView is based on javascript. This is not specific to the action mode, this is how WebView text selection is supposed to be retrieved according to WebView developers' point of view. They deliberately decided to not provide an API to access text selection from Java.

The solution comprise 2 approaches.

With Android API >= 19 you can use evaluateJavascript:

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

On older builds your only resort is a custom javascript interface with a single method accepting String, which you should call via webview.loadUrl passing the same thing:

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

where js is the attached javascript interface:

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

and

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

Upvotes: 3

Related Questions