Цвет фона Android WebView: прозрачный игнорируется на Android 2.2 - PullRequest
149 голосов
/ 15 февраля 2011

Я изо всех сил пытаюсь создать WebView с прозрачным фоном.

webView.setBackgroundColor(0x00FFFFFF);
webView.setBackgroundDrawable(myDrawable);

Затем я загружаю HTML-страницу с

<body style="background-color:transparent;" ...

Цвет фона WebView прозрачный, но каккак только страница загружается, она перезаписывается черным фоном с HTML-страницы.Это происходит только на Android 2.2, работает на Android 2.1.

Так что же нужно добавить в код HTML-страницы, чтобы сделать его действительно прозрачным?

Ответы [ 21 ]

272 голосов
/ 05 мая 2011

Это сработало для меня,

mWebView.setBackgroundColor(Color.TRANSPARENT);
122 голосов
/ 20 августа 2012

Внизу этой ранее упомянутой проблемы есть решение. Это комбинация из 2 решений.

webView.setBackgroundColor(Color.TRANSPARENT);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

При добавлении этого кода в WebViewer после загрузки URL-адреса это работает (API 11 +).

Работает даже при включенном аппаратном ускорении

36 голосов
/ 01 июня 2012

У меня была такая же проблема с 2.2, а также с 2.3.Я решил проблему, указав значение alpa в html, а не в Android.Я перепробовал много вещей и выяснил, что setBackgroundColor(); цвет не работает с альфа-значением.webView.setBackgroundColor(Color.argb(128, 0, 0, 0)); не будет работать.

так вот мое решение, сработало для меня.

      String webData = StringHelper.addSlashes("<!DOCTYPE html><head> <meta http-equiv=\"Content-Type\" " +
      "content=\"text/html; charset=utf-8\"> </head><body><div style=\"background-color: rgba(10,10,10,0.5); " +
      "padding: 20px; height: 260px; border-radius: 8px;\"> $$$ Content Goes Here ! $$$ </div> </body></html>");

А на Java

    webView = (WebView) findViewById(R.id.webview);
    webView.setBackgroundColor(0);
    webView.loadData(webData, "text/html", "UTF-8");

А вот и выводскриншот ниже. enter image description here

31 голосов
/ 01 марта 2011

На самом деле это ошибка, и пока никто не нашел обходного пути. Проблема была создана. Ошибка все еще здесь в сотах.

Пожалуйста, отметьте это, если считаете, что это важно: http://code.google.com/p/android/issues/detail?id=14749

22 голосов
/ 10 декабря 2012

Вот как вы это делаете:

Сначала сделайте ваш проект основанным на 11, но в AndroidManifest установите minSdkVersion на 8

android: hardwareAccelerated = "false" не требуется и несовместимо с 8

wv.setBackgroundColor(0x00000000);
if (Build.VERSION.SDK_INT >= 11) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

this.wv.setWebViewClient(new WebViewClient()
{
    @Override
    public void onPageFinished(WebView view, String url)
    {
        wv.setBackgroundColor(0x00000000);
        if (Build.VERSION.SDK_INT >= 11) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }
});

Для безопасности поместите это в свой стиль:

BODY, HTML {background: transparent}

работал у меня на 2,2 и 4

12 голосов
/ 29 июня 2014

Самая важная вещь не была упомянута.

html должен иметь тег body с background-color, установленным на transparent.

Таким образом, полное решение будет:


HTML

    <body style="display: flex; background-color:transparent">some content</body>

Активность

    WebView wv = (WebView) findViewById(R.id.webView);
    wv.setBackgroundColor(0);
    wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    wv.loadUrl("file:///android_asset/myview.html");
9 голосов
/ 28 декабря 2012

код ниже работает нормально Android 3.0 + , но когда вы попробуете этот код ниже Android 3.0, ваше приложение принудительно закроется.

webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

Вы пробуете код ниже на меньше, чем API 11 .

webview.setBackgroundColor(Color.parseColor("#919191"));

Или

Вы также можете попробовать приведенный ниже код, который работает на всех API отлично.

    webview.setBackgroundColor(Color.parseColor("#919191"));
    if (Build.VERSION.SDK_INT >= 11) {
        webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }

код, указанный выше, используется для меня.

7 голосов
/ 06 декабря 2011

Следующий код работает для меня, хотя у меня есть несколько веб-просмотров, и прокрутка между ними немного вялая.

v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p); 
7 голосов
/ 28 февраля 2011

Try webView.setBackgroundColor(0);

6 голосов
/ 02 сентября 2012

Используйте это

WebView myWebView = (WebView) findViewById(R.id.my_web);

myWebView.setBackgroundColor(0);
...