WebView getScrollY()总是返回0
我试图使用webview的滚动位置来确定SwipeRefreshLayout是否应该能够刷新,除了一些网站例如https://jobs.lever.co/memebox,getScrollY()总是返回0.有没有办法确保我总能得到正确的滚动位置?WebView getScrollY()总是返回0
您链接的网站有一个固定的标题。我的猜测是,页面本身不滚动;里面有一个容器。 WebView
无法检查页面上的每个可滚动容器,因此它看到顶级容器不滚动并假定整个事件都已修复。
如果你所需要的只是拉到刷新,我建议除了SwipeRefreshLayout
之外还增加一个刷新按钮。
检查您的网页布局。你的CSS中的position: relative;
可能是你问题的根源。相对定位导致在WebView中滚动出现问题。
也许你可以尝试把它添加到您的自定义的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);
}
,然后覆盖onScrollChanged
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);;
if (iWebViewScrollListener != null && t == 0) {
iWebViewScrollListener .onTop();
} else if (mIWebViewScroll != null && t != 0) {
iWebViewScrollListener .notOnTop();
}
}
添加一个顶级听众打电话滚动时。什么时候是onTop()
使用setEnabled(true)
为SwipeRefreshLayout,否则setEnabled(false)
我知道我们被告知要避免谢谢你的评论,但我不能帮助这个..我sp试图弄清楚这一点,感谢百万队友! – Tssomas 2017-07-13 17:22:42
这有点老了,但是这个问题依然存在。对于任何人想知道的,我通过下面的方式解决了这个问题。
在GestureListener
:
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);
}
}
现在,可以启用/禁用swipeRefreshLayout
如下正确使用getScrollY
:
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);
}
}
});
}
});
这可能重复:http://stackoverflow.com/questions/ 2132370/android-listview-getscrolly-do-it-work – 2015-03-18 22:45:06
不幸的是,我已经检查过这个链接,它不能告诉我我需要什么 – 2015-03-18 23:17:36