scrollview 嵌套webview+原生的页面,在原生view中一直闪烁.作为开发者如果遇到过这种情况,第一步就先google看下可能是什么情况。
于是有了这种说是硬件加速,滑动冲突的问题导致。
造成闪烁的原因是WebView在Android5.0开始默认开启了硬件加速,从Android3.0(API Level 11)开始,支持硬件加速,可充分利用GPU的特性,使得界面渲染更加平滑,但是会消耗更多内存RAM。但是硬件加速自身并非完美,在某些Android5.0的rom上,由于内存RAM分配的问题,如果代码不当,会引发闪屏、花屏等渲染问题
于是我试了一试,妈蛋还是不行,懵逼了
....
试着直接在布局顶部加了一个背景色,默认白色,运行,竟然就就就就好了.
NONONONO...
然后就出现了一个新的问题,webview 底部留白一块,给webview 设置了一个颜色,运行,空白果然属于Webview,也就是说,只要获取加载后网页的高度赋值给webview 就能解决问题。
直接给出方案:
@JavascriptInterface
public void resize(final float height) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
//Toast.makeText(getActivity(), height + "", Toast.LENGTH_LONG).show();
mWebView.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density)));
}
});
}
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
mWebView.loadUrl("javascript:App.resize(document.body.getBoundingClientRect().height)");
super.onPageFinished(view, url);
}
});
mWebView.addJavascriptInterface(this, "App");
其实就是在h5加载网页后,注入js,获取网页的高度,再回调原生的方法。
网友评论