WebViewでページ遷移時に外部Webブラウザーでページを開かない動作にする
こちらの記事でWebViewにページを表示するシンプルなアプリケーションを作成しました。
ページの読み込みは問題ありませんが、リンクをタップした際やページリダイレクトをすると外部のWebブラウザが起動しWebブラウザ側でページが開く動作になっています。
多くの場合は上記の動作で問題ありませんが、WebView内でページを表示したいこともあります。この記事ではページ遷移時に外部のWebブラウザを用いずにWebView内でページを読み込む方法を紹介します。
UI
MainActivityのフォームを編集します。下図のUIを作成します。フォームにWebViewを1つ配置しました。
パーミッション設定
AndroidManifest.xmlファイルを編集しPermissionsにuses permission要素を追加し、"android.permission.INTERNET"のパーミッションを付与します。
コード
下記のコードを記述します。
MainActivity.java
package com.iPentec.simplewebview;
import com.iPentec.simplewebview.R;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.*;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView1 = (WebView)findViewById(R.id.webView1);
webView1.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
webView1.loadUrl("http://www.google.co.jp/");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
解説
WebViewでのページ読み込みは
こちらの記事を参照してください。
webView1.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
上記が外部Webブラウザへの表示を抑制するコードです。WebViewオブジェクトのsetWebViewClientメソッドを呼び出しWebViewのWebViewClientを上書きします。上書きするWebViewClientは"shouldOverrideUrlLoading"メソッドをオーバーライドし戻り値を常にfalseとしています。shouldOverrideUrlLoadingの戻り値をfalseとすることで外部のWebブラウザでの表示を抑制できます。
実行結果
プロジェクトを実行します。下図の画面が表示されます。
[画像]タブをタップします。外部のWebブラウザは開きません。
画像検索やWeb検索をしても外部のWebブラウザでページが表示されなくなりました。
著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。