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

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


转载于:https://my.oschina.net/tmacsky/blog/534950

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值