A. 让WebView禁止下拉刷新
1.在webView类下使用:(因为webView已默认包含scrollView)
self.scrollView.bounces = NO;
2.或者在创建webView下:
webView.scrollView.bounces = NO;
B. Webview&Viewpager滑动冲突解决方案
感谢这些作者的分享
https://www.jianshu.com/p/24038d957e93
https://developer.android.com/jetpack/androidx/releases/swiperefreshlayout
https://wangyeming.github.io/2017/07/16/use-webview-in-viewpager/
1、如何控制使用webview处理事件还是viewpager处理事件。
2、根据什么来判断webview处理事件还是viewpager处理事件。
所有的滑动冲突问题解决的思路就是两个:
在这个场景中,在webview外面,可能还包了fragment等众多viewgroup,并且最终判断谁处理事件的依据在webview中,所以这里使用内部拦截法更方便。
可能你在测试时,会出现无法拦截的情况,我也遇到了,因为使用了SwipeRefreshLayout。下文会说到。
我找到了两种思路,第一种
显然,第一种方法是非常麻烦的,涉及到js交互,不具备通用性。因为测试了uc和夸克,发现在他们的浏览器中,都自动解决了滑动冲突,所以必然是有其他可以判断的依据的,最终找到了第二种方法。
这个方法触发的时机是webview滑动到边界时会触发,如果是横向滑动,则clamped则为true。这样的话,我们只要在clamped为true的时候,把事件交给viewpager来处理就行了。
上面说到了,如果你Webview的父布局中存在SwipeRefreshLayout,会发现,可能disallow无法传递到viewpager。理论上,不做任何处理,viewgroup的disallow方法,会挨个往父布局传递。但是为什么会传递失败呢?这就得看下SwipeRefreshLayout的源码(appcompat版本:1.2.0-alpha03)了:
从源码可以看出,如果SwipeRefreshLayout包裹的布局不支持NestedScroll的话,就不做任何处理。
其实这个是appcompat在1.2.0中才修改的,1.1.0版本是给了方法自己控制的:
一开始的思路是让SwipeRefreshLayout下面一层View支持nestedScroll,但是这样的话,会导致下拉刷新无法触发。
那就只能手动去修改disallow方法了:
这样修改以后,disallow就可以正常传递给viewpager了。到这里,就完美的解决了webview嵌套在Viewpager中的滑动冲突问题。
最终实现效果与uc和夸克一致。
C. 安卓webview dom元素的scrollTo方法不起作用
问题: 在安卓webview中报某个dom元素的 scrollTo is not a function (在手机上的chrome浏览器调试也报同样的错误)。
起因: 最近开发过程中引入了一个第三方的上拉加载更多和下拉刷新的库react-infinite-scroll-component,在ios上使用无问题,当在安卓上使用时则报错,无法滚动到指定的位置。
结论: 目前看来安卓的上元素不支持scrollTo的方法,建议类似滚动位置,如果是在一个 div容器内做滚动 ,还是通过设置 scrollTop 来控制比较保险。
D. 请求大神,webview怎么上拉下拉刷新
Android系统已经提供了一个下拉刷新的控件了 SwipeRefreshLayout
这个在类V4包中,google源生的,用法超简单,两行代码搞定了
你用SwipeRefreshLayout包裹你的WebView即可实现下接刷新了
E. 请求大神,webview怎么上拉下拉刷新
想必你肯定知道怎么在 scrollview上添加上拉下拉刷新功能吧,如果不太清楚,给我留言就行
然后可以参见下面属性
webview.scrollView
The scroll view associated with the web view. (read-only)
F. android webview中的下拉与自定义的下拉刷新冲突
这个就需要你判断下拉的位置了,需要用到事件流的分发,onInterrupttouchevent(),具体的名字记不住了,你打一下就会出来,如果位置是从最上方开始的,把这个下拉时间分给下拉刷新处理,如果不是,就给webView处理。思想就是这个思想,代码自己写。记得更清楚。
G. android webview中的下拉与自定义的下拉刷新冲突
这个就需要你判断下拉的位置了,需要用到事件流的分发,onInterrupttouchevent(),具体的名字记不住了,你打一下就会出来,如果位置是从最上方开始的,把这个下拉时间分给
下拉刷新
处理,如果不是,就给webView处理。思想就是这个思想,代码自己写。记得更清楚。
H. android webview怎么实现下拉刷新
这个就需要你判断下拉的位置了,需要用到事件流的分发,oninterrupttouchevent(),具体的名字记不住了,你打一下就会出来,如果位置是从最上方开始的,把这个下拉时间分给下拉刷新处理,如果不是,就给webview处理。思想就是这个思想,代码自己写。记得更清楚。
I. android pulltorefresh 怎么给webview 下拉刷新
那需要html5那边配合你,给你刷新接口,然后你重写刷新方法,自己写刷新逻辑
J. 安卓开发怎么设置scrollview的下拉刷新
可以实现的,不过scrollview嵌套listview的时候会导致listview只显示一个条目,你可以计算listview子item的高度,然后加起来设定listview高度,但是这样的listview失去了高性能,如果一定要使用scrollview和listivew嵌套,不如就把scrollview中listview上面的东西做成listview的header,下面的做成footer,这样就不用scrollview了。
另,谷歌的support
v4包更新了,出了一个layout叫SwipeRefreshLayout,是单独的一个下拉刷新layout,你可以更新后使用它,这个下拉控件可以应用到任何控件上,比如listview,gridview,webview,等等。