情景:郵件詳情頁上下翻頁,共用的一個webview,當內容改變時,webview高度沒有重繪,下方有大量留白。
解決方法:
重寫webViewClient()的onPageStarted()方法,重新測量webview的寬高。觸發重繪方法。
代碼:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//fix bug- 攔截三星某幾款手機對地址對了重新加載,加載異常
if (!TextUtils.isEmpty(url) && url.startsWith("geo:")) {
return true;
}
BaseWebViewFragment.show(getActivity(), "", url, true);
return true;//true表示此事件在此處被處理,不需要再廣播
}
@Override
public void onPageStarted(final WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Methods.log("onPageStarted");
//爲了使webview加載完數據後resize高度,之所以不放在onPageFinished裏,是因爲onPageFinished不是每次加載完都會調用
int w = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
//重新測量
view.measure(w, h);
view.post(new Runnable() {
@Override
public void run() {
//回到頁面頂端
scrollView.scrollTo(0, 0);
}
});
}
解法2:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
ViewGroup.LayoutParams layoutParams = webView.getLayoutParams();
layoutParams.height = 0;
webView.setLayoutParams(layoutParams);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//fix bug-http://qa.d.xiaonei.com/jira/browse/HFA-2824 攔截三星某幾款手機對地址對了重新加載,加載異常
if (!TextUtils.isEmpty(url) && url.startsWith("geo:")) {
return true;
}
BaseWebViewFragment.show(getActivity(), "", url, true);
return true;//true表示此事件在此處被處理,不需要再廣播
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
ViewGroup.LayoutParams layoutParams = webView.getLayoutParams();
layoutParams.height = WebView.LayoutParams.WRAP_CONTENT;
webView.setLayoutParams(layoutParams);
runOnUiThread(new Runnable() {
@Override
public void run() {
scrollView.scrollTo(0, 0);
}
});
}
});