完美解决SwipeRefreshLayout与WebView冲突
来源:互联网 发布:龙珠刷人气软件 编辑:程序博客网 时间:2024/04/29 13:44
问题分析:SwipeRefreshLayout嵌套使用WebView时,滚动时下拉事件不会被WebView捕获。(整个WebView都滑动)
解决方法:给WbeView加个监听器,重写onScrollChanged()。
public class ProgressWebView extends WebView {相应的Activity中的代码:private ChangeStatusListener changeStatusListener;public void setChangeStatusListener(ChangeStatusListener changeStatusListener) { this.changeStatusListener = changeStatusListener; }@Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { if (changeStatusListener != null) { changeStatusListener.changeStatus(); } super.onScrollChanged(l, t, oldl, oldt); }}
refreshWebView.setChangeStatusListener(()->{ if (refreshWebView.getScrollY() == 0) { mRefreshLayout.setEnabled(true); } else { mRefreshLayout.setEnabled(false); }});根据需求要求,有的界面有刷新功能,有的界面没有刷新功能。你们可以根据需求自行选择在自定义的WebView里面直接去重写,还是在相应的Activity里面去设置监听。mRefreshLayout.setOnRefreshListener(mListener);private AutoSwipeRefreshLayout.OnRefreshListener mListener = () -> {mRefreshLayout.setRefreshing(false);};refreshWebView.reload();
后来需求变更,H5页面进行了大改,设置了搜索栏的Header。内容可以滑动但是Header位置不变,以上方法就不好用了。以上方法针对的是全局可以滑动,下面的方法针对的是部分滑动
在自定义的ProgressWebView里面增加了如下代码:
滑动时需要根据你按下的状态对应H5页面滑动控件的位置去判断去对SwipeRefreshLayout做拦截事件。private AutoSwipeRefreshLayout mLayout;public void setmLayout(AutoSwipeRefreshLayout mLayout) { this.mLayout = mLayout;}@Overridepublic boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { this.evaluateJavascript("$(\".box\").scrollTop()", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { if (!TextUtils.isEmpty(value) && !"null".equals(value)){ if (Integer.parseInt(value) == 0){ mLayout.setEnabled(true); } else { mLayout.setEnabled(false); } } } }); } break; } return super.onTouchEvent(event);}
阅读全文
1 0
- 完美解决SwipeRefreshLayout与WebView冲突
- 完美解决SwipeRefreshLayout与RecyclerView滑动冲突问题
- Android WebView下拉刷新与SwipeRefreshLayout事件冲突解决
- webview与swiperefreshlayout滑动冲突
- SwipeRefreshLayout与webview冲突解决方案
- 解决SwipeRefreshLayout和webview下拉刷新冲突问题
- 解决SwipeRefreshLayout和webview下拉刷新冲突问题
- 解决listview与SwipeRefreshLayout滑动冲突问题
- SwipeRefreshLayout 与ListView滑动冲突的解决
- SwipeRefreshLayout与ViewPager滑动事件冲突解决
- android之swiperefreshlayout与scrollview冲突解决
- ListView与SwipeRefreshLayout滑动冲突解决方式
- 解决SwipeRefreshLayout与ScrollView滑动冲突
- SwipeRefreshLayout与ViewPager滑动事件冲突解决
- 解决listview与SwipeRefreshLayout滑动冲突问题
- SwipeRefreshLayout与SwipeLayout结合解决冲突
- 解决RecyclerView与SwipeRefreshLayout滑动冲突
- 终极方案:SwipeRefreshLayout刷新控件与webview控件冲突
- 块状元素行内元素和行内替换元素
- 杭电acm—1058 Humble Numbers
- java 接口(interface)
- Tensorflow深度学习之十:Tensorflow实现经典卷积神经网络AlexNet
- 相隔一段时间之后才可以执行某一事件的功能实现
- 完美解决SwipeRefreshLayout与WebView冲突
- leetcode--第5章--树-5.1二叉树的遍历--5.1.1 binary tree preorder traversal
- Git(二)
- JS常识总结20170727
- 20岁生日
- gcc的__attribute__((section(“”)))属性含义
- NOIP2016 T6 愤怒的小鸟
- C
- Tex中的表格列的宽度控制