转载请加地址: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显示,解决了问题。
欢迎交流。
版权声明:本文为博主原创文章,未经博主允许不得转载。