zoukankan      html  css  js  c++  java
  • 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显示,解决了问题。
  • 相关阅读:
    3.4 抓取猫眼电影排行
    2.5 代理的基本原理
    第二章 爬虫基础
    1.8 爬虫框架的安装
    Python序列化
    CVE-2020-1938 Apache-Tomcat-Ajp漏洞复现
    Python定制类
    Apache Tomcat DDOS
    内网端口转发工具
    内网渗透思路简单介绍
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317720.html
Copyright © 2011-2022 走看看