2016-01-15 36 views
2

我正在上下文操作菜單中添加一些自定義菜單項。我需要使用WebView中選定的單詞來提供網頁搜索功能。如何獲得ActionMode中webview的選定文本覆蓋

我使用此代碼覆蓋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視圖中選擇的詞搜索我的網站,但我沒有辦法獲取選定的文本。我怎麼能得到這一點,任何人請幫助。

在此先感謝。

+0

藉助Android API> = 19可以使用'webview.evaluateJavascript( 「(功能(){返回window.getSelection()。的toString()})()」,新ValueCallback () { @Override public void onReceiveValue(String value) Log.v(TAG,「SELECTION:」+ value); ('js.callback(window.getSelection(window.getSelection(()');}在舊版本中,你唯一的度假村是一個自定義的JavaScript接口,接受'String'的單個方法,你應該通過'webview.loadUrl'調用相同的東西(' )的ToString())')。 – Stan

+0

@Stan你可以把它作爲一個代碼在答案? –

回答

8

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); 
    } 
}); 

在舊建立你唯一的辦法就是一個自定義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); 
    } 
} 
+0

我會測試這個,並會接受答案! –

+0

接受了答案。非常感謝您拯救我的生命:-) –

+0

第一種方法(evaluateJavascript)不適用於我。難道我做錯了什麼?我在onRecieveValue方法中獲得了一個空值的值。 – clu

相關問題