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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ベータでも良いので3000viewerの最新版を使わせで下さい。315円は月末だけの購読でも十分に元がとれますのでその点はご心配なく。また、あくまでも自己責任で使いますのでその点にもご心配なく。
忘年会。私一人が平均年齢を上げていた気がしますが、楽しい一時でした。
Posted by rmutoh at 2010年12月19日 23:42
早速のアプリアップ。ありがとうございます。3knv00t4.apk早速使ってみました。ダウンロードを開始したところで「解析エラー」が出てしまいました。「パッケージの解析中に問題が発生しました。」というコメントが出てインストールが中断しています。ちなみに、パッドはE7001。androidのバージョンは1.5です。androidのバージョンが低すぎるでしょうか?
Posted by rmutoh at 2010年12月21日 00:09
早速の産経ネットビュアー用アプリのアップありがとうございます。試してみましたが「解析エラー/パッケージの解析中にエラーが発生しました」というコメントが発生しそれ以降には進めない状況です。当方のパッドはE7001。androidのバージョンは1.5です。バージョンが低すぎるのでしょうか?ちなみに昔の3000viewerは正常にダウンロードが出来ています。
Posted by rmutoh at 2010年12月21日 00:21
PCでダウンロードした後dropbox経由でパッドにロードし、dropboxの中のアプリを直接叩くという方法で起動した結果そうなりました。今夜、別の方法でもやってみようと思います。
Posted by rmutoh at 2010年12月21日 06:07
3000viewerをGALAXY S SC-02Bで使いたいのですが、androidマーケットなどで検索しても見つかりません。2010年12月20日の現在もうアプリを使うことは、できなくなっているのでしょうか?
Posted by keke at 2010年12月21日 18:56
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

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