WebView加载完成与显示完成的区别

在Android项目中,由于WebView未加载完成时,页面上Button会先显示,导致用户体验不佳。解决此问题需要监听WebView不仅加载完成,而且内容显示出来后才显示Button。尝试禁止WebView从缓存读取,确保每次从网络获取数据,并自定义WebView以精确监听内容显示完毕的时刻。

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

转载请加地址:http://blog.youkuaiyun.com/jing110fei/article/details/46649079

想到来总结个,是因为项目中遇到了这样一个问题,在一个布局里有一个WebView,紧跟着webView有一个Button,当进入这个页面的时候,因为webView在没有加载出来的缘故,页面最上部先显示了button,等webView加载完成后,可以很明显的看到button的移动。

为了解决这个事情,我先是想把Button GONE掉,然后做一个监听,等webView加载完成后再把Button显示出来,

于是

mWebView.setWebViewClient(new WebViewClient()  
{     
 @Override  
public void onPageFinished(WebView view, String url)   
{  
//结束  
super.onPageFinished(view, url);  
}  
  @Override  
  public void onPageStarted(WebView view, String url, Bitmap favicon)   
  {  
  //开始  
  super.onPageStarted(view, url, favicon);  
  }  
});  
逻辑上没了问题,但是实际效果上,却出现时灵时不灵的现象。

我判断不灵的时候是因为webView从缓存中读取数据导致监听加载结束不准确的原因,

我就设置不让webView从缓存中读取,每次都去网络获取

mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
但是还是没用,最后分析这里的加载完成应该是指webView去加载网页或者获取数据成功后就算加载完成了,

而我们想要的效果是监听到webView显示出我们想要的数据后,再让Button显示出来,

于是我就尝试自定义WebView

public class MyWebView extends WebView{  
    public interface PlayFinish{  
        void After();  
    }  
    PlayFinish df;  
    public void setDf(PlayFinish playFinish) {  
        this.df = playFinish;  
    }  
    public MyWebView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
    public MyWebView(Context context) {  
        super(context);  
    }  
    //onDraw表示显示完毕  
    @Override  
    protected void onDraw(Canvas canvas) {  
        super.onDraw(canvas);  
        df.After();  
    }  
}  

private MyWebView myWebView;
myWebView.setDf(new PlayFinish() {  
	    @Override  
	    public void After() {  
		btn_submit.setVisibility(View.VISIBLE);
	    }  
	});  

然后测试,大工高成,重写onDraw(),在应用中webView中内容开始绘制的时候再来让我们的button显示,解决了问题。

欢迎交流。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值