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;
            }
        });


猜你喜欢

转载自blog.csdn.net/qq_22225183/article/details/54847941