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

在开发APP并与H5页面交互时,为解决因网络问题导致的白屏现象,引入进度框来提升用户体验。文章指出,常见通过在WebView的`onPageFinished()`方法中隐藏进度框的方法在不同设备上表现不一致。作者提出了一种改进方案,即当WebView加载进度达到50%时关闭进度框,从而确保更及时地隐藏进度指示,实现了更友好的加载体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smile_raccoon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值