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 -