WebViewでページ遷移時に外部Webブラウザーでページを開かない動作にする - Android

こちらの記事で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の積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-04
作成日: 2013-03-15
iPentec all rights reserverd.