Цвет фона 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 ]

6 голосов
/ 01 ноября 2012
  • Попробовав все, что указано выше.Я обнаружил, что не важно, указали ли вы
    webView.setBackgroundColor(Color.TRANSPARENT) до или после loadUrl() /loadData().
  • Важно то, что вы должны явно объявить android:hardwareAccelerated="false" в манифесте.1009 *

Проверено на IceCream Sandwich

3 голосов
/ 21 февраля 2014
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

это точно сработает .. установить фон в XML с помощью Editbackground.Теперь этот фон будет показан

3 голосов
/ 28 октября 2013

Если веб-просмотр можно прокручивать:

  1. Добавить в манифест:

    android:hardwareAccelerated="false"
    

ИЛИ

  1. Добавьте следующее в WebView в макете:

    android:background="@android:color/transparent"
    android:layerType="software"
    
  2. Добавьте следующее в представление прокрутки родителей:

    android:layerType="software"
    
3 голосов
/ 13 февраля 2013

Просто используйте эти строки .....

webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);

И помните, что Всегда устанавливайте цвет фона после загрузки данных в веб-просмотр.

2 голосов
/ 06 февраля 2012

установить bg после загрузки html (из быстрых тестов кажется, что загрузка html сбрасывает цвет bg .. это для 2.3).

если вы загружаете html из данных, которые вы уже получили, достаточно просто сделать .postDelayed, в котором вы просто устанавливаете bg (например, прозрачный) ..

0 голосов
/ 13 февраля 2019
myWebView.setAlpha(0);

- лучший ответ.Это работает!

0 голосов
/ 19 октября 2018

Если ничего не помогает, то, скорее всего, у вас фиксированный размер webView, измените ширину и высоту на wrap_content или match_parent, это должно работать.Это сработало для меня, когда я попытался загрузить GIF.

0 голосов
/ 18 апреля 2018

Попробуйте:

myWebView.setAlpha(0.2f);
0 голосов
/ 03 ноября 2014

Это сработало для меня. Попробуйте установить цвет фона после загрузки данных. для этого setWebViewClient на объекте webview, например:

    webView.setWebViewClient(new WebViewClient(){

        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
            webView.setBackgroundColor(Color.BLACK);
        }
    });
0 голосов
/ 05 июля 2013

Я пытался наложить прозрачный HTML-оверлей поверх моего вида GL, но он всегда мерцает черным, что покрывает мой вид GL.После нескольких дней, пытаясь избавиться от этого мерцания, я нашел этот обходной путь, который является приемлемым для меня (но позор для Android).

Проблема в том, что мне нужно аппаратное ускорение для моих хороших CSS-анимаций и так webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); это не вариант для меня.

Хитрость заключалась в том, чтобы поместить вторую (пустую) WebView между моим видом GL и оверлеем HTML.Это dummyWebView я сказал рендерить в режиме SW, и теперь мои HTML-оверлеи сглаживаются в HW и больше не мерцают черным.

Я не знаю, работает ли это на других устройствах, чем My Acer Iconia A700,но я надеюсь, что смогу помочь кому-нибудь с этим.

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        RelativeLayout layout = new RelativeLayout(getApplication());
        setContentView(layout);

        MyGlView glView = new MyGlView(this);

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

        dummyWebView = new WebView(this);
        dummyWebView.setLayoutParams(params);
        dummyWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        dummyWebView.loadData("", "text/plain", "utf8");
        dummyWebView.setBackgroundColor(0x00000000);

        webView = new WebView(this);
        webView.setLayoutParams(params);
        webView.loadUrl("http://10.0.21.254:5984/ui/index.html");
        webView.setBackgroundColor(0x00000000);


        layout.addView(glView);
        layout.addView(dummyWebView);
        layout.addView(webView);
    }
}
...