透明WebView无法在Android v4.0上运行

时间:2012-02-14 18:40:23

标签: android android-webview

这个问题的一些背景是在这里。它涉及解决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) {}
}

3 个答案:

答案 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渲染,然后将背景设置为最匹配的颜色。如果你想出一个解决方案,我会留下深刻的印象。