背景
最近项目遇到一个需求,就是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>