setLayerType 解决自定义Dialog 嵌套腾讯 WebView 后显示不出来

项目中有一个需求:客户端提供一个容器来承载 H5, 展示的内容全部交给前端。 于是,很自然地选择用 Dialog 里面嵌套 WebView 的方式。由于我们项目中使用的是腾讯 X5 内核,所以就没有用系统的 WebView了。
项目上线后,测试反馈说在某 4.4.2 的机型上,WebView 显示不出来,如下图所示(打了一下码),这就很尴尬了┭┮﹏┭┮
这里写图片描述
可以看到,activity 的上覆盖了灰色透明的背景,而且按返回键就消失,说明 dialog 已经加载出来了,只是里面的内容没有显示出来。将 dialog 里面嵌套的 WebView 换成普通的 ImageVeiw,再次加载,ImageVeiw 的内容可以显示出来,证明问题出在 WebView 上。
后面找了很多资料,无奈没有找到有效的解决方案,再回看代码,发现设置 WebView 中有一行:

webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

这行代码设置了开启硬件加速,联想到之前搜索到的 WebView 白屏时关闭硬件加速就可以解决白屏的问题:见这里, 于是,设置:

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

终于顺利解决,效果如下,可以看到,嵌套着 H5 的 dialog 完美呈现出来了。
这里写图片描述


版权声明:本文为hust_twj原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。