今天同事提出了一个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;
}
});