获取WebView开始加载事件,并实现进度框的显示与隐藏

最近公司在开发一款APP,要求跟H5合作,需求是这样的,原声这块只需要写一个WebView调用H5的页面就可以了

但是有时候因为网络问题,在加载页面的时候,会出现一段很短时间的白屏状态,这时候就需要加一个进度框展示给用户,

比较友好,在网上搜了不少方法,说的最多的就是这种:

       在进入WebView的这个Activity的时候,在Oncreate()方法里显示进度框,然后在WebView的setWebViewClient()的时候需要复写掉

里面的一个方法就是:onPageFinished()在这个方法里写进度框消失的逻辑;

        这个方法大致看非常非常靠谱,但是,我在真机测试的时候,发现,不同厂家的Android手机,执行onPageFinished()这个方法的事件是不同的

这就造成了,有的手机显示的进度框的时间很长,有的却很短;这就尴尬了;而且我们要求的是只要WebView里面出现一点信息,就需要把进度框dismiss掉

所以这个方法其实不是最合适的。

       下面这段代码,是我自己结合网上搜索资料写的,最后的效果看最后的小视频

webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setUseWideViewPort(true);//web1就是你自己定义的窗口对象。
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.setWebViewClient(new MyWebView());
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        webView.loadUrl(url);
        webView.setWebChromeClient(new WebChromeClient(){

            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                Log.e("newProgress",newProgress+"");
                if(newProgress >=50 ){
                    dismissProgressDialog();
                }
            }
        });
注意:onProgressChanged()这个方法用过的同学都知道,他的第二个参数其实就是进度的数值,加上LOG看一下就知道了

所以,我这里就做一个判断,只要这个数字大于等于50,就让进度框dismiss掉,最后效果请看小视频:



猜你喜欢

转载自blog.csdn.net/smile_raccoon/article/details/52130464
今日推荐