WebView載入完成與顯示完成的區別,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顯示,解決了問題。
歡迎交流。