最近公司在开发一款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掉,最后效果请看小视频: