WebViewの搭載するべき機能

今回はWebViewの搭載するべき機能を確認したいと思います。

WebViewはほとんど機能が用意されてない状態です。(例えばJSも実装が必要です。)一通り重要そうな機能を入れてみます。

AndroidManifest.xmlは

<uses-permission android:name="android.permission.INTERNET"/>

レイアウトはwebViewだけ用意します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

基本となりそうな機能を詰め込んだクラスを作ってみましたので、必要に応じてご利用ください。

public class TipStarActivity extends Activity {

    WebView _webView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView _webView = ((WebView) findViewById(R.id.webView1));

        //スクロールバーの隙間を空かないようにする。
        _webView.setVerticalScrollbarOverlay(true);
        //キャッシュの可否:更新性の低いコンテンツであれば、溜めてもいいかもしれない。
        _webView.getSettings().setAppCacheEnabled(false);
        _webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        //ズームのコントローラーを用意するか?
        _webView.getSettings().setBuiltInZoomControls(true);
        //SNSのセッションを保つのに必要だったりします。
        _webView.getSettings().setDomStorageEnabled(true);
        //ページをのサイズをあわせる。
        _webView.getSettings().setLoadWithOverviewMode(true);
        _webView.getSettings().setUseWideViewPort(true);
        //Plugin - FLASH
        _webView.getSettings().setPluginState(WebSettings.PluginState.ON);
        //JSの利用の可否
        _webView.getSettings().setJavaScriptEnabled(true);

        //クラスを参照します。
        _webView.setWebChromeClient(new webChromeClient());
        _webView.setWebViewClient(new webViewClient());

        _webView.loadUrl("http://dorodoro.info/tip/");
    }

    public class webChromeClient extends WebChromeClient {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            //読み込みの進捗を取得できる。
            super.onProgressChanged(view, newProgress);
        }
    }
    public class webViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            //ローディングの開始
            super.onPageStarted(view, url, favicon);
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            //ローディングの終了
            super.onPageFinished(view, url);
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.substring(0, 7).equals("mailto:")) {//メール送信の場合
                mailSend(url);
                return true;
            }
            return true;
        }
    }

    public void mailSend(String url) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse(url.split("?")[0]));
        if(url.indexOf("subject=") != -1){
            String _url = url.split("subject=")[1].split("?")[0];
            intent.putExtra(Intent.EXTRA_SUBJECT, _url);
        }
        if(url.indexOf("body=") != -1){
            String _url = url.split("body=")[1].split("?")[0];
            intent.putExtra(Intent.EXTRA_TEXT, _url);
        }
        startActivity(intent);
    }
}

下記のようになるはずです!

上記で代替の用途のwebViewは利用できると思いますが、当然課題も多く存在します。

ブラウザを作る場合などあれば、課題をいくつか記しておきますので興味があったら個別にお調べください。

Basic認証
SSL
Window.open::新しいwebViewを用意したり大変。。
GeoLocation
COOKIE
JSとJAVAの連携
HTML5 Web SQLデータベース
HttpClient

 

  • written on 2012.06.05
  • category : WebView

同じカテゴリーの記事

前後の記事

前の記事:

次の記事:

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

素人のアンドロイドアプリ開発日記
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑