问题描述
Google官方不建议ScrollView+WebView的嵌套使用,但是为了需求实现,实在是没有找到其他的可替代方案,只能是采用此方法了。因为采用此方案,相关的问题也随之而来,其中最大的问题就是,WebView内容成功加载完成之后,内容显示一片空白,无法正常显示内容
原因
两者嵌套,ScrollView和WebView互相抢焦点,导致WebView宽高为0,从而导致显示空白。
解决办法
监听WebView加载完成回调接口,加载成功后,重新计算WebView的宽高,重新赋值。
核心代码
webView
.setWebChromeClient(new WebChromeClient());
webView
.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view
, String url
, Bitmap favicon
) {
super.onPageStarted(view
, url
, favicon
);
showDialog();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view
, String url
) {
view
.loadUrl(url
);
return true;
}
@Override
public void onReceivedError(WebView view
, WebResourceRequest request
, WebResourceError error
) {
super.onReceivedError(view
, request
, error
);
dissDialog();
}
@Override
public void onPageFinished(WebView view
, String url
) {
super.onPageFinished(view
, url
);
LinearLayout
.LayoutParams params
= (LinearLayout
.LayoutParams
) webView
.getLayoutParams();
WindowManager wm
= (WindowManager
) getSystemService(Context
.WINDOW_SERVICE
);
DisplayMetrics dm
= new DisplayMetrics();
wm
.getDefaultDisplay().getMetrics(dm
);
int width
= dm
.widthPixels
;
int height
= dm
.heightPixels
;
params
.width
= width
;
params
.height
= height
;
wvCommon
.setLayoutParams(params
);
dissDialog();
}
});
webView
.loadUrl(url
);