问题描述
 
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
);