5

コンテキスト アクション メニューにいくつかのカスタム メニュー項目を追加しています。WebView で選択した単語を使用して Web 検索機能を提供する必要があります。

このコードを使用して ActionMode をオーバーライドします。

@Override
    public void onActionModeStarted(ActionMode mode) {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            if (mActionMode == null) {
                mActionMode = mode;
            Menu menu = mode.getMenu();

            mode.getMenuInflater().inflate(R.menu.menu_search, menu);
        }
    }
    super.onActionModeStarted(mode);
}


public void onContextualMenuItemClicked(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_search:
            //HERE I WANT TO GET THE TEXT: HOW CAN I?
            break;
    }

    if (mActionMode != null) {
        mActionMode.finish();
    }
}

ユーザーが Web ビューで選択した単語を使用してサイトを検索したいのですが、選択したテキストを取得する方法がわかりません。どうすればそれを手に入れることができますか、誰か助けてください。

前もって感謝します。

4

1 に答える 1

16

からテキスト選択を取得する唯一の方法WebViewは、javascript に基づいています。これはアクション モードに固有のものではありません。これは、開発者の観点WebViewからテキスト選択を取得する方法です。WebView彼らは意図的に、Java からテキスト選択にアクセスするための API を提供しないことにしました。

このソリューションには 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);
    }
});

古いビルドでは、唯一の手段は、同じものを渡して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);
    }
}
于 2016-02-19T10:47:45.903 に答える