2010年10月25日

WebViewのZoomControlは表示せずに、マルチタッチのズームのみを有効にする

WebViewを使ったアプリを作っていて、
WebView内蔵のZoomControlは表示しないでズームボタンは自前で処理したいけど、
マルチタッチのズームはWebViewで処理させたくて色々試したけどうまくいかず…
ZoomControlを表示すれば、マルチタッチのズームは有効になるんだけど、
ZoomControlを非表示にすると、マルチタッチのズームも無効になってしまう。

そこで、WebViewのソースを追って解決方法を見つけたのでメモ。

WebViewのズーム関連のメソッドはWebSettings内の以下の2つ
setSupportZoom
setBuiltInZoomControls

WebViewのソースを見てみると、両方共trueをセットしたときのみマルチタッチが有効になるようになっていました。

そこで、
setSupportZoom(true)
setBuiltInZoomControls(true)
を呼び出したあと、リフレクションを使用してsetBuiltInZoomControlsの内部保持用の変数である
mBuiltInZoomControlsにfalseをセット

すると、ZoomControlは表示せずに、マルチタッチのズームのみ有効にすることが出来ました。
実際のコードは以下のような感じ。

WebSettings ws = webView.getSettings();
ws.setBuiltInZoomControls(true);
ws.setSupportZoom(true);
try{
//マルチタッチを有効にしたまま、zoom controlを消す
Field nameField = ws.getClass().getDeclaredField("mBuiltInZoomControls");
nameField.setAccessible(true);
nameField.set(ws, false);
}catch(Exception e){
e.printStackTrace();
ws.setBuiltInZoomControls(false);
}


posted by まつも at 22:57| Comment(5) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。