1. 程式人生 > >Android中scrollview巢狀webview後導致網頁載入成功但無法顯示

Android中scrollview巢狀webview後導致網頁載入成功但無法顯示

                   今天同事提出了一個bug,關於h5頁面無法顯示為空白頁,因為這塊的程式碼不是我寫的,之前同事寫的,所以我就看了一下程式碼,初看沒什麼問題,因為感覺這沒什麼難度,就是一個webview.loaduri(uri).後來檢查佈局也沒問題,無奈之下換了一個百度的連結,是可以,然後就分析查資料,原來是scrollview和webview都有焦點和滑動事件,高度無法自適應,所以我就在監聽webview載入完後重新設定高度就可以了。我直接上關鍵程式碼了,給自己做個筆記,希望也能幫助遇到同樣問題的同學。

這是佈局

 <ScrollView
        android:id="@+id/scroll_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/btn_share_next_step"
        android:layout_below="@+id/goods_navigation_bar"
        android:descendantFocusability="blocksDescendants"
        android:orientation="vertical"
        android:scrollbars="none">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <WebView
                android:id="@+id/webView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                />
        </LinearLayout>
        
    </ScrollView>
下面是程式碼:
WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);//設定能夠解析Javascript
        webSettings.setDomStorageEnabled(true);//設定適應Html5的一些方法
        webView.setWebChromeClient(new WebChromeClient());
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//                return super.shouldOverrideUrlLoading(view, url);
                webView.loadUrl(url);
                return true;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
//                super.onPageFinished(view, url);
                progress.setVisibility(View.GONE);
                LinearLayout.LayoutParams  params = (LinearLayout.LayoutParams) webView.getLayoutParams();
                params.width = getScreenWidth();
                params.height = getScreenHeight()-SizeUtil.dip2px(ScreenShotByH5Activity.this,150);
                webView.setLayoutParams(params);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                progress.setVisibility(View.VISIBLE);
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
                progress.setVisibility(View.GONE);
                showToastMessage("載入失敗");
            }
        });
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);

下面是解決scrollview和webview的滑動衝突程式碼

 webView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent ev) {

                ((WebView)v).requestDisallowInterceptTouchEvent(true);


                return false;
            }
        });