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

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

时间: 2024-12-28 12:15:35

Android WebView在4.4版本以上无法获取高度的相关文章

Android 5.0及以上版本使用webview不能使用Cookies解决方案

Android 5.0以上的手机使用原生WebView浏览网页,在进行登录的时候会提示验证码错误,通过查找5.0以上系统的api文档,发现5.0以上版本的webview做了较大的改动,如:同步cookie的操作已经可以自动同步.但前提是我们必须开启第三方cookie的支持. 解决方法:cookieManager.setAcceptThirdPartyCookies(webview, true); if(android.os.Build.VERSION.SDK_INT >= Build.VERSI

Android WebView 开发教程

1.WebView的使用 (a). 创建WebView的实例加入到Activity中 WebView webview = new WebView(this); setContentView(webview); 或者在xml中配置WebView <Webview android:layout_width="match_parent" android:layout_height="match_parent" > </Webview> (b). 访

屏蔽电信流氓广告造成的诡异的问题--Android WebView 长时间不能加载页面

发现在家里的时候用Android App里的WebView打开网站很慢,会有十几秒甚至更长时间的卡住. 但是在电脑上打开同样的网页却很快. 查找这个问题的过程比较曲折,记录下来. 抓取Android网络数据 为了调试这个问题,首先要抓取Android的网络包数据.开始时,是想用Wireshark来抓包的,但是很麻烦,tcpdump在手机要root权限. 于是转换思路,能不能在Android上设置代理,来抓包? 但是fiddler没有linux版本,于是转用BurpSuite了. 设置Androi

Android WebView 输入框键盘不弹出

问题 在Android中使用内嵌的WebView加载HTML网页时,如果html页面中存在输入框.那么在有些手机设备中,当输入框获取焦点时,系统输入法键盘无法正确弹出,从而无法完成正常的输入要求 在做APP时,自己也遇到了这个问题,以下是自己解决的方法,有可能不适合大家所遇到的情况,但值得借鉴~ WebView设置问题 有些时候我们设计的html页面并不能够很好的适应WebView,尤其我们的html页面是为PC浏览器设计的时候,当使用WebView来加载时,界面很可能会发生错乱,当input输

android webView webchromeclient 本地图片资源

解决android webView openFileChooser 不能调用本地文件 其实主要问题是出现在webChromeClient 的身上,通过查看webChromeClient的源代码我我们知道里面有个openFileChooser函数,不过很可惜,这个函数是不公开的,即使我们使用继承也不能使用这个函数.哈哈,那怎么办呢? 我们还是来看看这个函数具体长成啥样吧. 其实它是这样的 /** * Tell the client to open a file chooser. * @param

android WebView详解,常见漏洞详解和安全源码

这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView 的使用,下篇讲述 WebView 的漏洞和坑,以及修复源码的解析. 下篇:android WebView详解,常见漏洞详解和安全源码(下) 转载请注明出处:http://blog.csdn.net/self_study/article/details/54928371. 对技术感兴趣的同鞋加群 54

Android WebView加载Chromium动态库的过程分析

Chromium动态库的体积比较大,有27M左右,其中程序段和数据段分别占据25.65M和1.35M.如果按照通常方式加载Chromium动态库,那么当有N个正在运行的App使用WebView时,系统需要为Chromium动态库分配的内存为(25.65 + N x 1.35)M.这是非常可观的.为此,Android使用了特殊的方式加载Chromium动态库.本文接下来就详细分析这种特殊的加载方式. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 为什么当有

Android WebView与JS的交互方式 最全面汇总

前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 上述功能是由Android的WebView实现的,其中涉及到Android客户端与Web网页交互的实现 今天我将全面介绍Android通过WebView与JS交互的全面方式 阅读本文前请先阅读:Android开发:最全面.最易懂的Webview详解 目录 1. 交互方式总结 Android与JS通过WebView互相调用方法,实际上是: Android去调用JS的代码 JS去调用

你不知道的 Android WebView 使用漏洞

前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 上述功能是由 Android的WebView 实现的,但是 WebView 使用过程中存在许多漏洞,容易造成用户数据泄露等等危险,而很多人往往会忽视这个问题 今天我将全面介绍 Android WebView的使用漏洞 及其修复方式 阅读本文前请先阅读: Android开发:最全面.最易懂的Webview详解 最全面 & 最详细的 Android WebView与JS的交互方式 汇