在4.4以下的系统中,我们通常监听webview滑动到底端的方法如下:
1,先重新webview,FoundWebView
public class FoundWebView extends WebView { ScrollInterface mt; public FoundWebView(Context context) { super(context); // TODO Auto-generated constructor stub } public FoundWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public FoundWebView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); //Log.e("hhah",""+l+" "+t+" "+oldl+" "+oldt); mt.onSChanged(l, t, oldl, oldt); } public void setOnCustomScroolChangeListener(ScrollInterface t){ this.mt=t; } /** * 定义滑动接口 * @param t */ public interface ScrollInterface { public void onSChanged(int l, int t, int oldl, int oldt) ; } }
2,很少有人不自定义webview吧,直接调用系统的总是有一个地址栏太蛋疼了,所以一般都是在一个activity里加载webview
mWebView.setOnCustomScroolChangeListener(new ScrollInterface() { @Override public void onSChanged(int l, int t, int oldl, int oldt) { // TODO Auto-generated method stub webviewHight = mWebView.getContentHeight()*mWebView.getScale(); //已经处于底端 if((int)webviewHight == (mWebView.getHeight() + mWebView.getScrollY()) ){ } //已经处于顶端 // if (mWebView.getScaleY() == 0) { // // } } });
3,在底端和顶端都可以操作,但是在4.4的系统中,我发现无论如何获取的高度都会成这样
(int)webviewHight > mWebView.getHeight() + mWebView.getScrollY()
在一个测试手机上发现差值总是1,其他手机没测试
4,目前无法解决,但是考虑到底部显示的话,我这里就直接做了一个偏移,
mWebView.setOnCustomScroolChangeListener(new ScrollInterface() { @Override public void onSChanged(int l, int t, int oldl, int oldt) { // TODO Auto-generated method stub webviewHight = mWebView.getContentHeight()*mWebView.getScale(); //为解决4.4的系统无法获取正确的高度加一个“<10”的 if((int)webviewHight - (mWebView.getHeight() + mWebView.getScrollY()) < 10){ //已经处于底端 10个偏移量 } //已经处于顶端 // if (mWebView.getScaleY() == 0) { // // } } });
这样也可以解决4.4系统你在底部操作(其实也不是完全在底部)
Android WebView在4.4版本以上无法获取高度
时间: 2024-12-28 12:15:35