2013年10月21日月曜日

Webの表示-02(WebView,requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);, )

WeViewをもう少し使いやすくしたソースを紹介します。

サンプルソースで紹介しています。

タイトルバーにページを読み込む時のクルクル回る”あれ”を表示させる方法は

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

ページの読み込みの進捗を表すプログレスバーの表示は
requestWindowFeature(Window.FEATURE_PROGRESS);

いづれも、タイトルバーを非表示にすると、
表示されないので、気を付けてください。



サンプルソースでは、urlの読み込み時に
urlを分析して、GooglePlayの画面に遷移させたり、
メーラーのスキームを検知した時の処理を記述しています。
また、WebViewのプラグインも何個か入れているので、
よかったら、サンプルソースのコメントアウトを確認してください。



■サンプルソース
package com.example.webview;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //レイアウトの作成
        LinearLayout oLayout = new LinearLayout(getApplicationContext());

        //ページ読み込み中にぐるぐる回す
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        //ページ読み込みの進捗を棒で表示
        requestWindowFeature(Window.FEATURE_PROGRESS);
        //WebVIewの生成・設定
        WebView oWebview = Create_WebView();
        //WebViewをレイアウトに追加
        oLayout.addView(oWebview);
        //レイアウトの設定
        setContentView(oLayout);
        //最初に読み込むページの設定
        oWebview.loadUrl("http://google.co.jp");
    }

    private WebView Create_WebView(){
        WebView view = new WebView(this);
        //JSに対応
        view.getSettings().setJavaScriptEnabled(true);
        //拡大できるようにする
        view.getSettings().setBuiltInZoomControls(true);
        //Web Storageを使う。Fcebookで使われている
        view.getSettings().setDomStorageEnabled(true);
        //FLASH対応
        view.getSettings().setPluginsEnabled(true);
        view.getSettings().setPluginState(PluginState.ON);
  
        setProgressBarIndeterminateVisibility(true);
        setProgressBarVisibility(true);
        try {
            view.setWebViewClient(new WebViewClient() {
                //ページの読み込み完了時に呼ばれる
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    //プロセスバーの表示終了
                    setProgressBarIndeterminateVisibility(false);
                }
            
                //ページの読み込み時に呼ばれる
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
                    //プロセスバーの表示開始
                    setProgressBarIndeterminateVisibility(true);
                }

                //ページの読み込み前に呼ばれる。urlごとの処理はここで記述
                @Override
                public boolean shouldOverrideUrlLoading(WebView view,String url){
                    Toast.makeText(getApplicationContext(), url, Toast.LENGTH_SHORT).show();
                    //メーラーの立ち上げスキームを検知
                    if(url.substring(0, 7).equals("mailto:")) {
                        view.stopLoading();
                        Uri uri = Uri.parse(url);
                        //メーラーを立ち上げる
                        Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
                        startActivity(intent);
                        finish();

                    //Google Playのスキームを検知
                    }else if (url.startsWith("market://")){
                        //Google Playに飛ばす
                        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                        startActivity(i);
                        return true;
                    //他は全部読み込む
                    }else{
                        view.loadUrl(url);
                    }
                    return true;
                }
            });
      
            // インジケータの表示
            view.setWebChromeClient(new WebChromeClient() {
                @Override
                public void onProgressChanged(WebView view, int progress) {
                    setProgress(progress * 100);
                    if(progress == 100) {
                        setProgressBarIndeterminateVisibility(false);
                        setProgressBarVisibility(false);
                    }
                }
            });
        } catch (Exception e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
        return view;
    }
}



■実行結果

0 件のコメント:

コメントを投稿