情景:邮件详情页上下翻页,共用的一个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);
}
});
}
});