ScrollviewネストWebViewロードは成功しましたが空白を表示します
8514 ワード
問題の説明
Google公式はScrollView+WebViewのネスト使用を提案していませんが、需要実現のためには他の代替案が見つからず、この方法しか採用できません.この方式を採用するため、関連する問題もそれに伴って来て、その中の最大の問題は、WebViewコンテンツが正常にロードされて完成した後に、内容は一面の空白を表示して、正常に内容を表示することができません
の原因となる
両者がネストされ、ScrollViewとWebViewが互いに焦点を合わせ、WebViewの幅が0になり、表示空白になります.
解決策
WebViewのロードを傍受してコールバックインタフェースを完了し、ロードに成功した後、WebViewの幅を再計算し、値を再割り当てします.
コアコード
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; // ( )
int height = dm.heightPixels; // ( )
params.width = width;
params.height = height;
wvCommon.setLayoutParams(params);
dissDialog();
}
});
webView.loadUrl(url);