现在的位置: 首页 > 移动开发 > 正文

Android WebView在4.4版本以上无法获取高度

2018年09月19日 移动开发 ⁄ 共 1714字 ⁄ 字号 评论关闭

在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系统你在底部操作(其实也不是完全在底部)

抱歉!评论已关闭.