前提・実現したいこと
WebViewでHTMLを表示するいわゆるハイブリッドアプリをAndroidで開発しています。
ピンチアウトで画面を拡大表示させたいのですが、JavaScript側でtouchイベントを取るとAndroid側のBuiltInZoomが動作しない(拡大/縮小できない)ため困っています。
ちなみにPixel 4(Android 10)で発生しますが、Pixel 3(Android 9)では発生しません(拡大/縮小できる)。
該当のソースコード
JavaScript側は次のようにタッチイベントを取得しています。
JavaScript
1view.addEventListener('touchstart', (e) => { 2 // タッチ開始時の処理 3}); 4view.addEventListener('touchmove', (e) => { 5 // タッチ移動時の処理 6});
Android側はBuiltInZoomを有効にしています。
Java
1webView.getSettings().setBuiltInZoomControls(true); 2webView.getSettings().setDisplayZoomControls(true); 3webView.getSettings().setSupportZoom(true);
試したこと
- JavaScript側でタッチイベントを取得しない(addEventListener('touchstart')をコメントアウトする)場合は、拡大/縮小できます。
- WebViewのonScaleでピンチ操作時のイベントが取得できているため、getCurrentSpanしてonDrawで反映させることはできます。
- ただそうした場合、HTMLの"viewport"の"maximum-scale"を反映できないため、望ましくないです。"viewport"に合わせて最大拡大率をコントロールしたいです。
補足情報(FW/ツールのバージョンなど)
- Pixel 4(Android 10)とGalaxy Tab S4(Android 9)で発生します。Pixel 3(Android 9)だと拡大/縮小できています。
- setDisplayZoomControls(true)でコントロールを表示し、同コントロールの"+"と"-"で拡大/縮小することはできます。
- 指1本で長押しした状態から2本目の指でピンチアウトすると拡大できます。
- タッチイベントを取得していない要素に1方の指を置いてピンチアウトすると拡大できます。
- ピンチ操作時、画面が拡大できない場合もonScaleでイベントは呼ばれています。
- WebViewClient.onScaleChangedは拡大できるときのみ呼ばれています。
- 拡大許可したいページとそうでないページがあるため、"maximum-scale"を動的に変化させています。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。