WebView
に外部URLをロードしました。ここで必要なのは、ユーザーが読み込んだページ上のリンクをクリックすると、通常のブラウザーのように動作し、同じWebView
でリンクを開く必要があるということです。しかし、デフォルトのブラウザを開いてそこにページをロードしていますか?
JavaScriptを有効にしました。しかし、まだ機能していません。何か忘れましたか?
WebView
を使用している場合、デフォルトのAndroid動作を望まない場合は、自分でクリックをインターセプトする必要があります。
WebView
を使用して、WebViewClient
のイベントを監視できます。必要なメソッドは shouldOverrideUrlLoading()
です。これにより、特定のURLが選択されたときに独自のアクションを実行できます。
setWebViewClient()
method を使用して、WebViewClient
のWebView
を設定します。
SDKの WebView
サンプル を見ると、望みどおりに動作する例があります。次のように簡単です:
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());
メソッドboolean shouldOverrideUrlLoading(WebView view, String url)
はAPI 24で廃止されました。新しいデバイスをサポートする場合は、boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
を使用する必要があります。
次のようなことを行うことで、両方を使用できます。
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;
}
});
}
Arulx Zの答えはまさに私が探していたものでした。
ハイパーリンクのクリックに関係なくアプリ内でWebブラウジングを維持するために、recyclerviewとwebviewsを備えたNavigation Drawerでアプリを作成しています(したがって、外部Webブラウザーは起動しません)。そのためには、次の2行のコードを追加するだけで十分です。
mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());
webViewステートメントの下に正確に。
実装されたWebViewコードの例を次に示します。
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");
}}
これにより、WebサイトでクリックされたすべてのリンクがWebView内にロードされます。 (Android Studio 1.2.2を使用してすべてのSDKを更新)