ScrollviewネストWebViewロードは成功しましたが空白を表示します

8514 ワード

問題の説明
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);