解決WebView底部空白,真實有效

項目中有牽涉新聞的部分,新聞裏面用的是WebView和RecyclerView

因爲惠引入很多三方的web地址,部分WebView出現底部白屏,也有二級頁白屏的問題(這個是因爲自身原因,重定向後沒有重新設置高度)

找了相關資料,總算是給解決了

以下是解決白屏的代碼

首先在JavascriptInterface 裏面註冊一個 重新設置WebView的方法

public class BaseFunc {

public BaseFunc(Activity mActivity, WebView webView)

{ this.mActivity = mActivity;

this.webView = webView;
}

//註冊一個重新計算高度的方法

@JavascriptInterface

public void resize(final float height) {

mActivity.runOnUiThread(new Runnable() {

@Override

public void run() {

webView.setLayoutParams(new RelativeLayout.LayoutParams(mActivity.getResources().getDisplayMetrics().widthPixels, (int) (height * mActivity.getResources().getDisplayMetrics().density))); } }); }
}

以下是WebView頁面中的代碼

/** * 初始化js調用本地的方法 basefunc.goNative */

@SuppressLint("JavascriptInterface")

private void initJSExeLocaMethod() {

baseFunc = new BaseFunc(Activity.this, mWebView);

// --------html調用我們本地方法-----------

mWebView.addJavascriptInterface(baseFunc, "abc");

}

 

在WebView中的WebViewClient中實現onPageFinished

@Override
public void onPageFinished(WebView webView, String s) {
    //網頁加載完後,重新計算高度
    mWebView.loadUrl("javascript:abc.resize(document.body.getBoundingClientRect().height)");
    super.onPageFinished(webView, s);
}

經過以上處理,絕大多數白屏問題就解決了

在WebChromeClient中onProgressChanged和WebViewClient中onPageFinished都能監聽網頁的加載完成,但是onPageFinished會執行的比較晚,所以最好在onPageFinished方法裏面處理比較穩妥。

document.body.getBoundingClientRect().height //獲取WebView中body的高度

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章