hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

Android WebViewのズームコントロールを非表示にする

EBPocketでAndroid3.0以降本文のズームができないという問題があって、最近やっと解決方法がわかったのでメモしておきたい。

まず、AndroidでWebViewを使用したアプリでピンチイン・ピンチアウトによるズームを行う場合、次の方法で可能。

WebSettings webSettings = viewer.getSettings();
webSettings.setBuiltInZoomControls(true);

ところがこの方法だと、ズームコントロールが表示されてしまう。
ピンチイン・ピンチアウトを可能にしたままズームコントロールを隠す方法として、ググると次の方法がよく紹介されている。

WebSettings webSettings = viewer.getSettings();
webSettings.setBuiltInZoomControls(true);
try{
	Field nameField = webSettings.getClass().getDeclaredField("mBuiltInZoomControls");
	nameField.setAccessible(true);
	nameField.set(webSettings, false);
}catch(Exception e){
    webSettings.setBuiltInZoomControls(false);
}

この方法は、実はAndroid3.0(API19)以降では使えない。getDeclaredFieldが失敗してcatchに行ってしまう。
API19以降はsetDisplayZoomControlsという専用のAPIが用意されており、こちらを使うのが正解。

WebSettings webSettings = viewer.getSettings();
webSettings.setBuiltInZoomControls(true);
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
	webSettings.setDisplayZoomControls(false);
}
else {
	try{
		Field nameField = webSettings.getClass().getDeclaredField("mBuiltInZoomControls");
		nameField.setAccessible(true);
		nameField.set(webSettings, false);
	}catch(Exception e){
		    webSettings.setBuiltInZoomControls(false);
	}
}

私が個人的に「女神様」と呼んでいる下記サイトでは、API19が出た時点で早々に紹介されている。やはりリリースノートは読まないといけないという教訓でした。
Y.A.M の 雑記帳: Android 3.0 Platform - 3 -