2016-12-03 1 views
0

Ich versuche, den Benutzer zu benachrichtigen, wenn Textauswahl in WebView Android ändert.Hören Sie Auswahltext ändern in webView android

Ich versuchte setOnTouchListener zu bedienen und zu

android.view.MotionEvent.ACTION_UP 

und vergleichen letzten Auswahltext mit neuen nach retuschieren, indem hören:

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

und

webSettings.setJavaScriptEnabled(true); 
myWebView.addJavascriptInterface(new WebAppInterface(), "Android"); 
public class WebAppInterface { 
     @JavascriptInterface 
     public void callback(String value) { 
      Log.d(getClass().getName(), value); 
      selected = value; 
      if (selected.length() > 0) { 
       Snackbar.make(findViewById(android.R.id.content), selected, Snackbar.LENGTH_SHORT).show(); 
      } 
     } 
} 

Aber ich Problem haben, dass wenn Benutzer ziehen/ändern Auswahl Cursor, OnTouch nicht feuern d

Antwort

0

Ich habe genug ausreichende Lösung für mein Problem erreicht, aber immer noch nicht wissen, warum onTouch nicht ausgelöst, wenn Cursor ziehen.

hier, i verwendet setOnInterval() Auswahltext alle 1000ms zu überprüfen und, wenn es eine Änderung gibt, feuern sie WebAppInterface

myWebView = (WebView) findViewById(R.id.webview); 
WebSettings webSettings = myWebView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 
myWebView.addJavascriptInterface(new WebAppInterface(), "Android"); 
myWebView.loadData("Logcat is a tool that dumps a log of system messages. The messages include a stack trace when the device throws an error, as well as log messages written from your application and those written using JavaScript console APIs" + 
     "<script>" + 
     "var text='';setInterval(function(){ if(window.getSelection().toString() && text!==window.getSelection().toString()){text=window.getSelection().toString();console.log(text);Android.showToast(text); }}, 1000);" + 
     "</script>" +,"text/html; charset=UTF-8", null); 
myWebView.setWebChromeClient(new WebChromeClient() { 
    public void onConsoleMessage(String message, int lineNumber, String sourceID) { 
     Log.d("MyApplication", message); 
    } 
}); 

public class WebAppInterface { 
    /** Show a toast from the web page */ 
    @JavascriptInterface 
    public void showToast(String toast) { 
     Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show(); 
    } 
}