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 ответов


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

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