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

Oll*_*e C 13 android android-webview

这个问题的一些背景是在这里.它涉及解决Android中已知的错误,其中WebView背景需要透明. Android WebView样式background-color:透明在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) {}
}
Run Code Online (Sandbox Code Playgroud)

小智 11

我遇到了同样的问题,我发现这是一些关于硬件加速的Android版本的错误.Spiri的上述答案有效,但我需要将我的WebView硬件加速,因为它需要播放视频.我发现的效果很好,如下:

而不是使用

mWebView.setBackgroundColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)

我用的是:

mWebView.setBackgroundColor(Color.argb(1, 255, 255, 255));
Run Code Online (Sandbox Code Playgroud)

这适用于我之前遇到此问题的所有Android设备.


Spi*_*iri 9

我在android api 16级遇到了类似的问题,这解决了它:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 'view' is a WebView
Run Code Online (Sandbox Code Playgroud)

这会根据文档禁用视图上的硬件加速:http: //developer.android.com/guide/topics/graphics/hardware-accel.html

我知道这不是可行的方法,但由于这是一个已知问题,因此他们提出了一个合适的解决方案,这个就完成了工作(至少对我而言).


小智 1

前几天我花了几个小时在这个问题上,尝试了有关该主题的所有可能的答案,并亲自调查了一些东西。我遇到了同样的问题,如果网络视图是可滚动的,那么它就不会是透明的。使其透明的唯一方法是在“设置”>“开发人员选项”中禁用 GPU 渲染。我最终只是检查是否启用了 GPU 渲染,然后将背景设置为最匹配的颜色。如果你想出一个解决方案,我会很高兴听到它。