AndroidでWebブラウザアプリを作る
AndroidでWebブラウザアプリを作る
主に使用するクラス
android.webkit.WebView
WebView実装
...省略 private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // webView mWebView = (WebView) findViewById(R.id.web_view); mWebView.setWebViewClient(new MyWebViewClient()); // ->(1) mWebView.loadUrl("https://www.yahoo.co.jp"); // ->(2) mWebView.getSettings().setJavaScriptEnabled(true); // ->(3) } ...省略
(1) setWebViewClientはWebViewでのイベントをハンドリングするために実装してsetする
(2) URLを読み込む
(3) WebView内でJavaScriptを有効にする
WebViewClientでWebView内のイベントをハンドリングする
...省略 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { // ->(4) return false; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // ->(5) super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { // ->(6) super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { // ->(7) super.onReceivedError(view, request, error); } } ...省略
(4) リクエスト開始前にハンドリングされる trueを返すと他アプリやActivityが起動するデフォルトの挙動になるのでfalseを返す
(5) 読み込み開始処理
(6) 読み込み終了
ブラウザであればこの時点でURLのstringを取得してURLバーに表示させることができる
(7) エラーハンドリング
端末の戻るボタンでブラウザバックを実装
...省略 @Override public void onBackPressed() { if (mWebView.canGoBack()) { // ->(7) mWebView.goBack(); // ->(8) } else { super.onBackPressed(); // ->(9) } } ...省略
(7) canGoBackがtrueならばブラウザバックをすることができる
(8) goBackでブラウザバック
(9) canGoBackがfalseならば端末の戻る機能をそのまま使用する
検索を実装する
android.support.v7.widget.SearchView
を利用して検索バーを実装する
...省略 private SearchView mSearchView; ...省略 @Override protected void onCreate(Bundle savedInstanceState) { ...省略 // search view mSearchView = (SearchView) findViewById(R.id.search_view); mSearchView.setOnQueryTextListener(new MySearchViewTextListener()); // ->(10) ...省略
(10) イベントリスナをセットする
...省略 private class MySearchViewTextListener implements SearchView.OnQueryTextListener { // ->(11) @Override public boolean onQueryTextSubmit(String query) { // ->(12) searchTextInWebView(query); // ->(13) return false; // ->(14) } @Override public boolean onQueryTextChange(String newText) { // ->(15) return false; // ->(16) } } ...省略
(11) SearchView.OnQueryTextListenerをimplementsしたクラスを定義する
(12) キーボードの送信を押したときのコールバック
(13) WebViewを使用して検索するためのメソッド(後述)
(14) falseを返すとハンドリングする trueを返すとデフォルトの挙動になる(Intentの発生など)
(15) テキストが変更されたときのコールバック
(16) falseを返すとハンドリングする trueを返すとデフォルトの挙動になる(Intentの発生など)
...省略 /** WebView内でYahoo検索をするメソッド */ private void searchTextInWebView(String text) { String p = ""; // ->(17) try { p = URLEncoder.encode(text,"UTF-8"); // ->(18) } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String url = "https://kids.yahoo.co.jp/search/bin/search?ei=UTF-8&fr=ush&p="+p; // ->(19) mWebView.loadUrl(url); mSearchView.clearFocus(); // ->(20) mWebView.requestFocus(); } ...省略
(17) 検索クエリの初期化
(18) java.net.URLEncoderを使用して検索クエリをエンコードする
(19) Yahoo検索のGETパラメータに検索クエリをセットする
(20) SearchViewのフォーカスを外してキーボードを隠す
まとめ
以上で簡単なブラウザアプリを実装することができます
サンプルコード
githubにありますので参考にしていただければと思います https://github.com/rdme/WebViewSample