Цвет фона AndroidView WebView: прозрачный игнорируется на Android 2.2

Я пытаюсь создать WebView с прозрачным фоном.

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

Затем я загружаю html-страницу с помощью

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

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

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

Ответ 1

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

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

Ответ 2

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

mWebView.setBackgroundColor(Color.TRANSPARENT);

Ответ 3

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

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

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

Это даже работает, когда ускорение на жестком диске включено.

Ответ 4

У меня была такая же проблема с 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

Ответ 5

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

Сначала создайте базу проекта на 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

Ответ 6

Самое главное не упоминалось.

В 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");

Ответ 7

ниже код работает отлично 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);
    }

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

Ответ 8

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

v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p); 

Ответ 9

Try webView.setBackgroundColor(0);

Ответ 10

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

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

myWebView.setBackgroundColor(0);

Ответ 11

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

Протестировано на сэндвич IceCream

Ответ 12

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

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

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

Ответ 13

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

  • Добавьте это в манифест:

    android:hardwareAccelerated="false"
    

ИЛИ

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

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

    android:layerType="software"
    

Ответ 14

webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

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

Ответ 15

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

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

Ответ 16

Попробуйте webView.setBackgroundColor(Color.parseColor( "# EDEDED" ));

Ответ 17

Я пытался наложить прозрачный наложенный текст над моим 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);
    }
}

Ответ 18

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

    webView.setWebViewClient(new WebViewClient(){

        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
            webView.setBackgroundColor(Color.BLACK);
        }
    });

Ответ 19

Проверять:

myWebView.setAlpha(0.2f);