Android中scrollview巢狀webview後導致網頁載入成功但無法顯示
阿新 • • 發佈:2018-11-27
今天同事提出了一個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;
}
});