に外部URLをロードしましたWebView
。ここで必要なのは、ユーザーがロードされたページのリンクをクリックすると、通常のブラウザーのように機能し、同じでリンクを開く必要があるということWebView
です。しかし、それはデフォルトのブラウザを開いてそこにページをロードしていますか?
JavaScriptを有効にしました。しかし、それでも機能していません。何か忘れましたか?
に外部URLをロードしましたWebView
。ここで必要なのは、ユーザーがロードされたページのリンクをクリックすると、通常のブラウザーのように機能し、同じでリンクを開く必要があるということWebView
です。しかし、それはデフォルトのブラウザを開いてそこにページをロードしていますか?
JavaScriptを有効にしました。しかし、それでも機能していません。何か忘れましたか?
を使用しているWebView
場合、デフォルトのAndroidの動作が必要ない場合は、クリックを自分でインターセプトする必要があります。
WebView
を使用してイベントを監視できますWebViewClient
。必要な方法はですshouldOverrideUrlLoading()
。これにより、特定のURLが選択されたときに独自のアクションを実行できます。
メソッドを使用してのを設定しWebViewClient
ます。WebView
setWebViewClient()
WebView
SDKのサンプルを見ると、必要なことを実行する例があります。それは次のように簡単です:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
場合によっては、URL読み込みメソッドをトリガーしないリダイレクトを取得した場合に、onLoadResourceのオーバーライドが必要になることがあります。この場合、私は次のことを試みました:
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}
公式ドキュメントによると、WebViewのリンクをクリックすると、URLを処理するアプリケーションが起動します。このデフォルトの動作をオーバーライドする必要があります
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
または、メソッドに条件付きロジックがない場合は、これを実行するだけです。
myWebView.setWebViewClient(new WebViewClient());
この2行をコードに追加します-
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
The method boolean shouldOverrideUrlLoading(WebView view, String url)
was deprecated in API 24. If you are supporting new devices you should use boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
.
You can use both by doing something like this:
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;
}
});
}