繼上一篇 Android WebView常見問題及解決方案匯總 中歸納了一些處理webview的常見問題,這次要說的是webview中的touch事件:
有時候在開發中,我們需要對webview加入觸摸事件的處理,比如加入滑動效果或者類似於閱讀中的翻頁效果,這時候我們就需要重寫webview中的onTouch方法:
public class MyWebView extends WebView{public MyWebView(Context context) { super(context); }@Overridepublic boolean onTouchEvent(MotionEvent evt) { switch (evt.getAction()){ case MotionEvent.ACTION_DOWN: //do something...... break; case MotionEvent.ACTION_MOVE: //do something...... break; case MotionEvent.ACTION_UP: //do something...... break; } return false;}}
這裡要注意的是,傳回值要為false,將此事件繼續向下傳遞.否則會引起 超連結不起作用的問題.
將onTouch()事件中的傳回值改為false之後,有時候仍然還是不會觸發onTouch()事件,這是為什麼呢.經過逐行代碼的分析,終於找到了問題的根源:
主要是因為做了如下設定:
webView.getSettings().setBuiltInZoomControls(true);
該設定讓webview控制項可以支援縮放,而這個縮放設定,同樣會響應onTouch事件的,所以會覆蓋掉我們自己設定的onTouhc監聽,引起了事件的衝突.
怎麼辦呢,如果需要設定webview大小的話,不是用webview的setting支援,而是調用webView.setInitialScale()函數來設定webview的大小
具體的數值可以這樣處理:
1.如果webview需要固定大小,可根據解析度及webview位置綜合計算頁面大小初始比例.當然一般遇到頁面大小固定的話,還是在H5頁面中進行適配處理最好
2.如果就是需要對webview進行縮放,則需要給使用者提供一個縮放按鈕,然後自己控制每次縮放的數值,然後調用webView.setInitialScale(),數值大小根據需求而定,若無要求可參照webview本身支援的縮放大小數值.