Scrollview嵌套WebView加载成功但是显示空白
程序员文章站
2022-06-04 14:45:55
...
问题描述
Google官方不建议ScrollView+WebView的嵌套使用,但是为了需求实现,实在是没有找到其他的可替代方案,只能是采用此方法了。因为采用此方案,相关的问题也随之而来,其中最大的问题就是,WebView内容成功加载完成之后,内容显示一片空白,无法正常显示内容
原因
两者嵌套,ScrollView和WebView互相抢焦点,导致WebView宽高为0,从而导致显示空白。
解决办法
监听WebView加载完成回调接口,加载成功后,重新计算WebView的宽高,重新赋值。
核心代码
webView.setWebChromeClient(new WebChromeClient());
//该方法解决的问题是打开浏览器不调用系统浏览器,直接用webview打开
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);
//解决ScrollView嵌套WebView加载成功但是展示不出来的问题
//原因是ScrollView和WebView抢焦点,导致WebView宽高被重置为0
//解决办法为,把WebView的高度进行重置
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; // 屏幕宽度(像素)
params.width = width;
wvCommon.setLayoutParams(params);
dissDialog();
}
});
webView.loadUrl(url);
上一篇: 下海盛大 PHP工程师 面试题
下一篇: php自定义加密解决实现代码