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

转载请加地址:http://blog.csdn.net/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显示,解决了问题。

欢迎交流。

时间: 2024-07-28 21:03:33

WebView加载完成与显示完成的区别的相关文章

安卓 WebView加载本地图片时居中显示

在一个项目中使用WebView显示gif图片(自定义的View无法放大gif),当图片过小时只在左侧显示,经过研究发现无论设置android:layout_gravity="center_horizontal"还是设置android:gravity="center_horizontal" 都无法居中显示,而且还设置了android:layout_width="wrap_content",但是实际上WebView并没有自适应内容,它的宽度占了屏幕宽

WebView加载HTML图片大小自适应与文章自动换行

http://www.brighttj.com/ios/ios-webview-load-html-image-adaptive.html 在很多App中都会使用到webview,尤其是在加载新闻内容等文章形式的数据时.因为图文混编以及不同字体格式的显示,在iOS进行编辑和显示都是一大问题(当然,iOS中也可以用CoreText进行绘制),但是对于web端来说,一个富文本编辑器就可以完美解决这个问题.所以后台很多时候会直接返回HTML代码拿给前端解析,这时,在客户端对HTML代码的处理就显得尤为

使用WebView加载HTML代码

使用EditText显示HTML字符串时,EditText不会对HTML标签进行任何解析,而是直接把所有HTML标签都显示出来-----就像用普通记事本显示一样:如果应用程序想重新对HTML字符串进行解析.当成HTML页面来显示,也是可以的. WebView提供的loadData(String  data ,  String  mimeType ,  String  encoding)方法,该方法可用于加载并显示HTML代码,但在实际使用过程中,当它加载包含中文HTML内容时,WebView将会

WebView 加载网页和java 与js交互

[mw_shl_code=java,true]WebView是一个可以显示网页的控件.需求:通过WebView加载assets下的html文件.实现页面的缩放.向menu键添加:前进.后退和刷新,实现对网页的操作点击网页中的链接,仍然使用本WebView浏览器,而非调用系统的浏览器网页中有button,点击button,调用android的Toast点击WebView隐藏地址栏和button,点击menu键显示地址栏和button.WebView加载网页的方式WebView webview =

webview加载html5的问题

WebSettings ws = mViewHolder.contentWbv.getSettings(); /** * setAllowFileAccess 启用或禁止WebView访问文件数据 setBlockNetworkImage 是否显示网络图像 * setBuiltInZoomControls 设置是否支持缩放 setCacheMode 设置缓冲的模式 * setDefaultFontSize 设置默认的字体大小 setDefaultTextEncodingName 设置在解码时使用

webView 加载进度条,webView返回键重写机制

1.图片延时加载 brower = (WebView) this.findViewById(R.id.brower); settings = brower.getSettings(); settings.setJavaScriptEnabled(true); //阻塞图片下载 settings.setBlockNetworkImage(true); private class Client extends WebViewClient     {         @Override        

Android开发必知--WebView加载html5实现炫酷引导页面

大多数人都知道,一个APP的引导页面还是挺重要的,不过要想通过原生的Android代码做出一个非常炫酷的引导页相对还是比较复杂的,正巧html5在制作炫酷动画网页方面比较给力,我们不妨先利用html5做出手机引导页面,然后将其嵌入APP中. 首先我们分析一下,都需要做哪些工作? 1.制作html5引导页面. 2.把做好的页面放入Android工程中assets文件夹下. 3.利用WebView加载asset文件夹下的html文件. 4.在引导页最后一页的按钮上捕捉点击事件,结束引导页,进入程序.

【Android开发经验】使用WebView加载本地图片出现闪屏的解决方法

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 问题描述 运行环境 解决方案 问题描述 使用WebView加载本地图片的时候,也就是一段HTML代码嵌入本地的图片地址的形式,会出现短暂的灰色的闪烁,然后就可以正常显示图片了,WebView的背景颜色在xml中设置为黑色. 同时,出现这个问题的时候,Log会打印报错信息:nativeOnDraw failed; clearing to background color. 运行环境 nexus5 Andro

使用webview加载网页时session同步

直接调用Android的webview加载URL时,由于需要登录的session导致URL无法显示,解决方案是在需要访问的URL中加session: String reporturl = "http://xxx.xxx.xx"; CookieSyncManager.createInstance(getApplication()); CookieManager cookieManager = CookieManager.getInstance(); CookieSyncManager.g