如果启用了硬件加速,WebView将以“白色背景闪烁”(Android 3.0+)

时间:2012-02-28 03:55:55

标签: android webview android-3.0-honeycomb android-4.0-ice-cream-sandwich hardware-acceleration

我遇到了WebView(Android 3.0+)的问题,在显示我的黑色背景(“闪烁”)之前,WebView始终显示白色背景。这是我的简单测试代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WebView webView = new WebView(this);
    webView.setBackgroundColor(Color.BLACK);
    setContentView(webView);
    loadWebView(webView);
    webView.loadDataWithBaseURL("localhost://", "<html><head>" +
            "<style>body {background-color: #000}img{max-width:100%}</style></head>" +
            "<body>" +
            "<img src=\"http://developer.android.com/images/practices/actionbar-phone-splitaction.png\" />" +
            "</body></html>", 
            "text/html", "UTF-8", null);
}

我尝试了很多解决方案来摆脱这个问题,但不幸运。

PS:如果关闭硬件加速,则不会出现此问题。有人有同样的问题并解决了吗?

谢谢。

6 个答案:

答案 0 :(得分:45)

我发现对此最有效的解决方法first mentioned here是在布局膨胀后设置透明背景颜色:

webView.setBackgroundColor(Color.argb(1, 0, 0, 0));

是的,这完全是黑客攻击,但它是我发现在没有禁用硬件加速的情况下工作良好的唯一解决方案。

请注意,可以通过在XML中设置背景来实现。

这已在Jellybean中得到解决,尽管有些用户报告在KitKat中看到了这一点。检查您是否已禁用硬件加速,如果问题确实消失,您可能希望将该代码包装在条件语句中以仅定位旧设备:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    webView.setBackgroundColor(Color.argb(1, 0, 0, 0));
}

答案 1 :(得分:12)

我为应用程序启用了硬件加速,并为活动禁用了它。另外,我将背景设置为null,如上所述。它现在适用于我。

另一种方法(未经测试):将图层类型设置为软件渲染并将背景设置为Color.TRANSPARENT(或0):webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Greetz Thorsten

答案 2 :(得分:8)

Android 4.4.4上存在此问题,此处没有其他解决方案有效。无论如何,我正在弄乱onPageFinished(),所以不妨试试那些应该是防弹的东西:

我把它放在托管WebView的片段的onCreateView()中:

    webView = (WebView) v.findViewById(R.id.webView);
    webView.setVisibility(View.INVISIBLE);
    webView.setBackgroundColor(Color.argb(1, 0, 0, 0));         

    webView.setWebViewClient( new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            view.setVisibility(View.VISIBLE);
            super.onPageFinished(view, url);
        }
    });

这个想法只是隐藏WebView,直到第一页加载完毕。然而,在我添加Paul Lammertsma提供的解决方案之前,它仍然给了我一小段白色,webView.setBackgroundColor(Color.argb(1, 0, 0, 0));

答案 3 :(得分:4)

这显然是Android版本&gt; 3的“功能”。甚至官方应用谷歌阅读器都包含这个白色闪光解决方案是禁用活动的硬件加速,您需要使用快速绘制Web视图。

答案 4 :(得分:0)

与Web视图有类似的问题。 我曾经在冰淇淋三明治上工作,并且在Android Manifest中使用minSdk = 13为我工作。 尝试尝试一下。我猜SDK中有一些错误。

答案 5 :(得分:0)

就这样:

WebView web=(WebView)findViewById(R.id.web);
web.setBackgroundColor(0xff000000);