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



这里是这个问题的一些背景。它涉及到解决安卓系统中一个已知的错误,即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渲染是否启用,然后将背景设置为最匹配的颜色。如果你能想出一个解决方案,我会很高兴听到它。

相关内容

最新更新