0%

webview和下拉刷新

下拉刷新SwipeRefreshLayout会和Webview的竖向滚动冲突,网上各种解决方法五花八门,有重写SwipeRefreshLayout的,有给Webview触摸加偏移的,但遇到固定页面有嵌套滚动就全阵亡了。一个偶然发现Webview也有OverScrolled方法,会在滚动超过处理范围时调用,既然知道什么时候过滚动,那问题就迎刃而解了。

重写WebView

按下的时候置false,在onOverScrolled更新状态:

1
2
3
4
5
6
7
8
9
10
11
var overScrollY = false
override fun onOverScrolled(scrollX: Int, scrollY: Int, clampedX: Boolean, clampedY: Boolean) {
overScrollY = clampedY
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY)
}

@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
if (event.action == MotionEvent.ACTION_DOWN) overScrollY = false
return super.onTouchEvent(event)
}

SwipeRefreshLayout监听

SwipeRefreshLayout.setOnChildScrollUpCallback返回WebView.overScrollY

1
2
3
item_swipe.setOnChildScrollUpCallback { _, _ ->
!curWebView.overScrollY
}

两步搞定,简直不能更简单,更进一步还能适配关联滚动。