这里是这个问题的一些背景。它涉及到解决安卓系统中一个已知的错误,即WebView背景需要透明。Android WebView风格的背景颜色:在Android 2.2 上忽略透明
它涉及一个WebView,承载一个具有透明背景的HTML文档,因此WebView是透明的,HTML文档可以覆盖在其他视图上。
在Android v2、v3和v4上,将以下方法添加到WebView子类并从构造函数调用它对我来说很有效,除非WebView的像素高度大于以像素为单位的屏幕高度(例如,WebView位于ScrollView中,因此比屏幕长)。
protected void setBackgroundToTransparent() {
this.setBackgroundColor(Color.TRANSPARENT);
this.setBackgroundDrawable(null);
if (Build.VERSION.SDK_INT >= 11) // Android v3.0+
try {
Method method = View.class.getMethod("setLayerType", int.class, Paint.class);
method.invoke(this, 1, new Paint()); // 1 = LAYER_TYPE_SOFTWARE (API11)
} catch (Exception e) {}
}
我遇到了同样的问题,我发现这是一些版本的Android中关于硬件加速的错误。Spiri上面的答案是有效的,但我需要我的WebView进行硬件加速,因为它需要播放视频。我发现效果很好,如下所示:
而不是使用
mWebView.setBackgroundColor(Color.TRANSPARENT);
我使用的是:
mWebView.setBackgroundColor(Color.argb(1, 255, 255, 255));
这适用于我之前遇到这个问题的所有Android设备。
我在android api级别16上遇到了类似的问题,这解决了它:
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 'view' is a WebView
这将根据文档禁用视图上的硬件加速:http://developer.android.com/guide/topics/graphics/hardware-accel.html
我知道这不是一条路,但由于这是一个已知的问题,除非他们想出一个合适的解决方案,否则这个解决方案就可以了(至少对我来说)。
前几天我花了几个小时在这个问题上,尝试了关于这个主题的每一个答案,也亲自调查了一些事情。我也遇到了同样的问题,如果网络视图是可滚动的,那么它就不会是透明的。我可以使其透明的唯一方法是在"设置">"开发人员选项"中禁用GPU渲染。我最终只是检查了gpu渲染是否启用,然后将背景设置为最匹配的颜色。如果你能想出一个解决方案,我会很高兴听到它。