Android WebView Touch事件及相關問題處理

來源:互聯網
上載者:User

 

繼上一篇 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本身支援的縮放大小數值.

 

 

 

 

 

 

 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.