WebView加载完成与显示完成

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

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

于是

[java] view plain copy
  1. mWebView.setWebViewClient(new WebViewClient()    
  2. {       
  3.  @Override    
  4. public void onPageFinished(WebView view, String url)     
  5. {    
  6. //结束    
  7. super.onPageFinished(view, url);    
  8. }    
  9.   @Override    
  10.   public void onPageStarted(WebView view, String url, Bitmap favicon)     
  11.   {    
  12.   //开始    
  13.   super.onPageStarted(view, url, favicon);    
  14.   }    
  15. });    
逻辑上没了问题,但是实际效果上,却出现时灵时不灵的现象。

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

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

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

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

于是我就尝试自定义WebView

[java] view plain copy
  1. public class MyWebView extends WebView{    
  2.     public interface PlayFinish{    
  3.         void After();    
  4.     }    
  5.     PlayFinish df;    
  6.     public void setDf(PlayFinish playFinish) {    
  7.         this.df = playFinish;    
  8.     }    
  9.     public MyWebView(Context context, AttributeSet attrs) {    
  10.         super(context, attrs);    
  11.     }    
  12.     public MyWebView(Context context) {    
  13.         super(context);    
  14.     }    
  15.     //onDraw表示显示完毕    
  16.     @Override    
  17.     protected void onDraw(Canvas canvas) {    
  18.         super.onDraw(canvas);    
  19.         df.After();    
  20.     }    
  21. }    

[java] view plain copy
  1. private MyWebView myWebView;  
[java] view plain copy
  1. myWebView.setDf(new PlayFinish() {    
  2.         @Override    
  3.         public void After() {    
  4.         btn_submit.setVisibility(View.VISIBLE);  
  5.         }    
  6.     });    

然后测试,大工高成,重写onDraw(),在应用中webView中内容开始绘制的时候再来让我们的button显示,解决了问题。
原文地址:https://www.cnblogs.com/hzcya1995/p/13317720.html