这个问题的一些背景是在这里。它涉及解决Android中已知的错误,其中WebView背景需要透明。 Android WebView style background-color:transparent ignored on android 2.2
它涉及一个WebView,托管一个透明背景的HTML文档,因此WebView是透明的,HTML文档可以叠加到其他视图上。
将以下方法添加到WebView子类并从构造函数中调用它在Android v2,v3和v4上适用于我,当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) {}
}
答案 0 :(得分:11)
我遇到了同样的问题,我发现这是某些Android版本中有关硬件加速的错误。 Spiri的上述答案有效,但我需要将我的WebView硬件加速,因为它需要播放视频。我发现的效果很好,如下:
而不是使用
mWebView.setBackgroundColor(Color.TRANSPARENT);
我使用的是:
mWebView.setBackgroundColor(Color.argb(1, 255, 255, 255));
这适用于我之前遇到此问题的所有Android设备。
答案 1 :(得分:9)
我在android api 16级遇到了类似的问题,这解决了它:
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 'view' is a WebView
根据文档禁用视图上的硬件加速: http://developer.android.com/guide/topics/graphics/hardware-accel.html
我知道这不是可行的方法,但由于这是一个已知问题,因此他们提出了一个合适的解决方案,这个解决了这个问题(至少对我而言)。
答案 2 :(得分:1)
前几天我在这上花了几个小时,尝试了每一个答案,可能就是这个问题,也是我自己调查的东西。我遇到了同样的问题,如果webview是可滚动的,那么它就不会透明。我可以使其透明的唯一方法是在设置>中禁用GPU渲染开发者选项。我最终只检查了是否启用了gpu渲染,然后将背景设置为最匹配的颜色。如果你想出一个解决方案,我会留下深刻的印象。