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

19 142

19 ответов:

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

mWebView.setBackgroundColor(Color.TRANSPARENT);

в самом низу эта ранее упомянутая проблема есть решение. Это сочетание 2-х решений.

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

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

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

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

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

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

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

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

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

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

ниже код работает штраф в размере 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);
    }

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

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

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

попробовать webView.setBackgroundColor(0);

использовать

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

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

проверено на Сэндвич С Мороженым

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

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

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

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

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

    android:hardwareAccelerated="false"
    

или

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

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

    android:layerType="software"
    
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

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

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

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

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

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

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

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

Я не знаю, если это работает на других устройствах, чем мой 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);
    }
}

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

    webView.setWebViewClient(new WebViewClient(){

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

попробуйте:

myWebView.setAlpha(0.2f);