Durch Klicken auf URLs wird der Standardbrowser geöffnet

Ich habe eine externe URL in mein WebView . Nun, was ich brauche, ist, dass, wenn der Benutzer auf die Links auf der geladenen Seite klickt, er wie ein normaler Browser funktionieren und den Link in demselben WebView öffnen WebView . Aber es öffnet den Standardbrowser und lädt die Seite dort?

Ich habe JavaScript aktiviert. Aber es funktioniert immer noch nicht. Habe ich etwas vergessen?

Wenn Sie ein WebView Sie die Klicks selbst abfangen, wenn Sie das Standardverhalten von Android nicht möchten.

Sie können Ereignisse in einem WebView mit einem WebViewClient . Die gewünschte Methode ist ‘ shouldOverrideUrlLoading() . Dadurch können Sie eine eigene Aktion ausführen, wenn eine bestimmte URL ausgewählt wird.

Sie legen den WebViewClient Ihrer WebView mit der Methode setWebViewClient() .

Wenn Sie sich das WebView Beispiel im SDK ansehen, gibt es ein Beispiel, das genau das tut, was Sie wollen. Es ist so einfach wie:

 private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } 

In einigen Fällen benötigen Sie möglicherweise eine Überschreibung von onLoadResource, wenn Sie eine Weiterleitung erhalten, die die Methode zum Laden von URLs nicht austriggers. In diesem Fall habe ich folgendes versucht:

 @Override public void onLoadResource(WebView view, String url) { if (url.equals("http://redirectexample.com")) { //do your own thing here } else { super.onLoadResource(view, url); } } 

Offizielle Dokumentation sagt, klicken Sie auf einen Link in einem WebView startet Anwendung, die URLs behandelt. Sie müssen dieses Standardverhalten überschreiben

  myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } }); 

oder wenn es keine bedingte Logik in der Methode gibt, tun Sie dies einfach

 myWebView.setWebViewClient(new WebViewClient()); 

Fügen Sie diese 2 Zeilen in Ihrem Code hinzu –

 mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient()); 

Arulx Z’s Antwort war genau das was ich suchte.

Ich schreibe eine App mit Navigationsschublade mit Recyclerview und Webviews, um das Surfen im Internet innerhalb der App zu halten, unabhängig von den angeklickten Hyperlinks (der externe Webbrowser wird nicht gestartet). Dafür genügt es, die folgenden 2 Codezeilen zu setzen:

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

genau unter Ihrer WebView-statement.

Hier ist ein Beispiel für meinen implementierten WebView-Code:

 public class WebView1 extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView wv = (WebView) findViewById(R.id.wv1); //webview statement wv.setWebViewClient(new WebViewClient()); //the lines of code added wv.setWebChromeClient(new WebChromeClient()); //same as above wv.loadUrl("http://www.google.com"); }} 

Auf diese Weise wird jeder auf der Website angeklickte Link in Ihr WebView geladen. (Android Studio 1.2.2 wird mit allen SDKs aktualisiert)

Die Methode boolean shouldOverrideUrlLoading(WebView view, String url) wurde in API 24 nicht weiter unterstützt. Wenn Sie neue Geräte unterstützen, sollten Sie den boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) .

Sie können beide verwenden, indem Sie Folgendes tun:

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { newsItem.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } }); } else { newsItem.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); }