it-swarm-ru.tech

Цвет фона Android 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-код страницы, чтобы сделать его действительно прозрачным? 

144
jptsetung

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

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

31
jptsetung

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

mWebView.setBackgroundColor(Color.TRANSPARENT);
267
scottyab

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

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

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

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

120
Ceetn

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

И на Яве,

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

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

35
osayilgan

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

Сначала сделайте ваш проект основанным на 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

22
Ali

Самое главное не было упомянуто.

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");
11
lilotop

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

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

9
duggu

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

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

Попробуйте webView.setBackgroundColor(0);

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

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

6
Gaurav Arora

Использовать этот 

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

myWebView.setBackgroundColor(0);
6
Zahid Habib

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

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

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

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

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

3
Shivendra

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

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

    Android:hardwareAccelerated="false"
    

OR

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

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

    Android:layerType="software"
    
3
Baton

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

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

2
Lassi Kinnunen

Проверять:

myWebView.setAlpha(0.2f);
0
Abhilash Nair

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

Проблема в том, что для анимации Nice 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);
    }
}
0
Ingemar

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

0
Hayk
myWebView.setAlpha(0);

это лучший ответ. Оно работает!

0
Wooden Ghost

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

    webView.setWebViewClient(new WebViewClient(){

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

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

0
raja