はじめに
- Chrome みたいに PullToRefresh でウェブページを更新してみたいなと思って実装してみたものの、
ハマりどころがあったので、それの紹介になります。
単純な実装の問題点
- 「WebView + PullToRefresh」 などで検索してみると SwipeRefreshLayout を使った実装例がよく出てきます。
よくあるレイアウト例
<SwipeRefreshLayout>
<FrameLayout>
<WebView />
</FrameLayout>
</SwipeRefreshLayout>
- 実際、サンプル通りの実装でなんとかなるのですが、
Google マップのような指でぐりぐり動かすウェブアプリの場合悲惨な事が起きます。
- SwipeRefreshLayout が TouchEvent を吸ってしまって、地図が動かせなくなります…
解決策
- Chromium の実装を眺めてた所 OverScroll を監視していて、コンテンツサイズが WebView のサイズを越えない
(=スクロールバーが表示されない)場合には SwipeRefreshLayout を有効にしないといった処理になっていました。 - Chromium は WebViewCore から多種多様なイベントを貰っているので同じ実装は出来ません。
- そこでアレンジしたものを git にあげておきましたので、実装を見てみて下さい。
80行程度の小さなものです。
https://github.com/lovetanpopo/PullToRefreshWebView