当NestedScrollView嵌套WebView 并且 滑动WebView H5界面还会分页加载内容时,分页不起作用的解决办法

背景

最近项目遇到一个需求,就是NestedScrollView 里面 嵌套了 WebView,一开始直接 对 xml 布局里面的 NestedScrollView 设置 fillViewport,这是WebView可以显示内容了,但是只显示了一个屏幕大小的内容而已

而且滑动到底部时,触发不了H5里面的js分页加载功能,因为滑动时滑动的NestedScrollView 而不是WebView,后来固定了WebView大小,并且设置了WebView的触摸事件

web.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                ((WebView) v).requestDisallowInterceptTouchEvent(false);
                return false;
            }
        });

这样当触摸WebView时,确实可以滚动WebView的内容,并且WebView滑动到底部可以触发分页,但是WebView滑动到顶部的时候,NestedScrollView没啥反应,我想要的效果是,当WebView

滑动到顶部时,就轮到NestedScrollView滑动, 这样才能完美的衔接起来,看起来很顺畅,所以又改造了一下WebView的触摸事件

 web.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent ev) {


                if (scrollView.getScrollY() < web.getTop()) {
                    ((WebView) v).requestDisallowInterceptTouchEvent(false);
                    return false;
                }
                ((WebView) v).requestDisallowInterceptTouchEvent(true);

                if (web.getScrollY() == 0) {
                    int dy = (int) (ev.getY() - y);
                    if (dy > 0) {
                        //down
                        Log.i("xxxx", "down");
                        ((WebView) v).requestDisallowInterceptTouchEvent(false);
                    } else {
                        //up
                        Log.i("xxxx", "up");
                        ((WebView) v).requestDisallowInterceptTouchEvent(true);
                    }
                    y = (int) ev.getY();
                }
                return false;
            }
        });

布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/scrollView"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:ignore="WebViewLayout">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="500dp"
            android:text="地方都是"
            />
        <!-- 这里再放一个RecyclerView 啥的都行 ,我的项目是WebView放在最后的-->
        <WebView
            android:id="@+id/web"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />
    </LinearLayout>
</androidx.core.widget.NestedScrollView>

 

上一篇:【Android+Kotlin】NestedScrollView


下一篇:Android ScrollView嵌套RecyclerView