遇到這麼個bug,webview使用swipeRefreshLayout時,下拉時事件不會被webview捕獲,而是執行swipeRefreshLayout的刷新,網上一大堆一大堆的解決辦法,都是什麼重寫swipeRefreshLayout或者重寫WebView,原本爲了快點解決bug copy了一下,結果發現媽的智障。。。琢磨了一下,很簡單的一個事。。。android
mWebView.setOnScrollChangeListener(new View.OnScrollChangeListener() { @Override public void onScrollChange(View view, int i, int i1, int i2, int i3) { if (mWebView.getScrollY() == 0){ swipeRefreshLayout.setEnabled(true); }else { swipeRefreshLayout.setEnabled(false); } } });
直接給webview加個監聽器,這個方法貌似在android不一樣版本會出現不兼容的狀況。。。因此又有另一種方法,重寫onScrollChanged
public class WebView4Scroll extends WebView { private SwipeRefreshLayout swipeRefreshLayout; public WebView4Scroll(Context context, SwipeRefreshLayout swipeRefreshLayout){ super(context); this.swipeRefreshLayout = swipeRefreshLayout; } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (this.getScrollY() == 0){ swipeRefreshLayout.setEnabled(true); }else { swipeRefreshLayout.setEnabled(false); } } }
重寫webview,重寫onScrollChanged,此次終於能完美解決了!web
重點:本質上仍是要理解事件分發機制ide