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);
}
忘年会。私一人が平均年齢を上げていた気がしますが、楽しい一時でした。