Android WebView getScrollY()始终返回0

Android WebView getScrollY()始终返回0,android,android-webview,Android,Android Webview,我正在尝试使用webview的滚动位置来确定SwiperFreshLayout是否能够刷新,但某些网站除外,例如getScrollY()始终返回0。有没有办法确保我始终获得正确的滚动位置?您链接的站点有一个固定的标题。我猜页面本身不会滚动;里面有一个容器。WebView无法检查页面上的每个可滚动容器,因此它会看到顶级容器没有滚动,并假设整个内容都是固定的 如果你只需要点击刷新,我建议你在查看你的网页布局的同时添加一个刷新按钮位置:相对可能是问题的根源。相对定位会导致在网络视图中滚动出现问题。也许

我正在尝试使用webview的滚动位置来确定SwiperFreshLayout是否能够刷新,但某些网站除外,例如getScrollY()始终返回0。有没有办法确保我始终获得正确的滚动位置?

您链接的站点有一个固定的标题。我猜页面本身不会滚动;里面有一个容器。
WebView
无法检查页面上的每个可滚动容器,因此它会看到顶级容器没有滚动,并假设整个内容都是固定的


如果你只需要点击刷新,我建议你在查看你的网页布局的同时添加一个刷新按钮<代码>位置:相对可能是问题的根源。相对定位会导致在网络视图中滚动出现问题。

也许您可以尝试将其添加到自定义网络视图中

告诉我它在滚动

 @Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()){
        case MotionEvent.ACTION_DOWN:
            if(this.getScrollY() <= 0){
                this.scrollTo(0,1);
            }
            break;
        case MotionEvent.ACTION_UP:
            break;
    }
    return super.onTouchEvent(event);
}

在滚动时添加一个顶级侦听器回调。当是
onTop()
时,对SwiperFreshLayout使用
setEnabled(true)
,否则
setEnabled(false)
这有点陈旧,但此问题仍然存在。对于任何想知道的人,我通过以下方法解决了这个问题

手势监听器中

private class GestureListener extends GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

        if(distanceY>0) webView.scrollBy(0,1);
        else webView.scrollBy(0,-1);
    }
}
现在可以使用
getScrollY
正确启用/禁用
swipeRefreshLayout
,如下所示:

swipeLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        ViewTreeObserver observer = swipeLayout.getViewTreeObserver();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            observer.removeOnGlobalLayoutListener(this);
        } else {
            observer.removeGlobalOnLayoutListener(this);
        }
        observer.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {

                if (webView.getScrollY()==0) {
                    swipeLayout.setEnabled(true);
                } else {
                    swipeLayout.setEnabled(false);
                }
            }
        });
    }
});

可能重复:不幸的是,我已经检查了这个链接,它无法告诉我我需要什么我知道我们被告知要避免“谢谢你”的评论,但我无法帮助这个。。我花了好几天的时间想弄明白这一点,非常感谢你的朋友!
swipeLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        ViewTreeObserver observer = swipeLayout.getViewTreeObserver();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            observer.removeOnGlobalLayoutListener(this);
        } else {
            observer.removeGlobalOnLayoutListener(this);
        }
        observer.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {

                if (webView.getScrollY()==0) {
                    swipeLayout.setEnabled(true);
                } else {
                    swipeLayout.setEnabled(false);
                }
            }
        });
    }
});