it-swarm.com.de

Hintergrundfarbe des Android-WebView-Stils: Transparent wird auf Android 2.2 ignoriert

Ich bemühe mich, ein WebView mit transparentem Hintergrund zu erstellen.

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

Dann lade ich eine HTML-Seite mit 

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

Die Hintergrundfarbe des WebView ist transparent, aber sobald die Seite geladen ist, wird sie durch einen schwarzen Hintergrund der HTML-Seite überschrieben. Dies geschieht nur unter Android 2.2, es funktioniert unter Android 2.1.

Gibt es etwas zu dem HTML-Seitencode hinzuzufügen, um ihn wirklich transparent zu machen? 

144
jptsetung

Eigentlich ist es ein Fehler, und bis jetzt hat noch niemand einen Workaround gefunden. Ein Problem wurde erstellt. Der Fehler ist immer noch hier in Wabe.

Bitte markieren Sie es, wenn Sie es für wichtig halten: http://code.google.com/p/Android/issues/detail?id=14749

31
jptsetung

Das hat für mich funktioniert,

mWebView.setBackgroundColor(Color.TRANSPARENT);
267
scottyab

Am Ende von dieser zuvor erwähnten Ausgabe gibt es eine Lösung ..__ Es ist eine Kombination von 2 Lösungen.

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

Wenn Sie diesen Code zum WebViewer hinzufügen, nachdem die URL geladen wurde, funktioniert er (API 11+).

Es funktioniert sogar, wenn die Hardwarebeschleunigung eingeschaltet ist

120
Ceetn

Ich hatte das gleiche Problem mit 2.2 und auch in 2.3. Ich löste das Problem, indem ich den alpa-Wert in HTML nicht in Android angab. Ich habe viele Dinge ausprobiert und was ich herausgefunden habe, ist setBackgroundColor();. Farbe funktioniert nicht mit Alpha-Wert. webView.setBackgroundColor(Color.argb(128, 0, 0, 0)); wird nicht funktionieren.

also hier ist meine lösung für mich gearbeitet.

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

Und in Java

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

Und hier ist der Output-Screenshot unten.enter image description here

35
osayilgan

Das ist wie man es macht:

Legen Sie zunächst Ihre Projektbasis auf 11 fest, setzen Sie in AndroidManifest jedoch minSdkVersion auf 8

Android: hardwareAccelerated = "false" ist nicht erforderlich und mit 8 nicht kompatibel

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

Zur Sicherheit legen Sie dies in Ihren Stil:

BODY, HTML {background: transparent}

arbeitete für mich am 2.2 und 4

22
Ali

Das Wichtigste wurde nicht erwähnt.

Für die HTML-Datei must ist ein Tagbodymit background-color auf transparent gesetzt.

Die vollständige Lösung wäre also:


HTML

    <body style="display: flex; background-color:transparent">some content</body>

Aktivität

    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

der folgende Code funktioniert gut Android 3.0+ aber wenn Sie diesen Code unter Android 3.0 versuchen, wird Ihre App zwangsweise geschlossen.

webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

Sie versuchen den folgenden Code auf Ihrer less als API 11 .

webview.setBackgroundColor(Color.parseColor("#919191"));

Oder

sie können auch den folgenden Code ausprobieren, der für alleAPIfine funktioniert.

    webview.setBackgroundColor(Color.parseColor("#919191"));
    if (Build.VERSION.SDK_INT >= 11) {
        webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
    }

code oben für mich voll nutzen.

9
duggu

Der folgende Code funktioniert für mich, obwohl ich mehrere Webviews habe und das Scrollen zwischen ihnen etwas träge ist.

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

Versuchen Sie es mit webView.setBackgroundColor(0);

7
Andrew Podkin
  • Nachdem Sie alles ausprobiert haben. Ich habe festgestellt, dass es egal ist, ob Sie es angeben
    webView.setBackgroundColor(Color.TRANSPARENT) vor oder nach loadUrl()loadData().
  • Wichtig ist, dass Sie Android:hardwareAccelerated="false" explizit im Manifest angeben.

Getestet am _/IceCream Sandwich

6
Gaurav Arora

Benutze das 

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

myWebView.setBackgroundColor(0);
6
Zahid Habib

Verwenden Sie einfach diese Zeilen .....

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

Denken Sie daran, dass die Hintergrundfarbe nach dem Laden von Daten in Webview immer festgelegt wird.

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

dies wird definitiv funktionieren. Hintergrund in XML mit Editbackground setzen. Nun wird dieser Hintergrund angezeigt

3
Shivendra

Wenn Webview scrollbar ist:

  1. Fügen Sie das Manifest hinzu:

    Android:hardwareAccelerated="false"
    

OR

  1. Fügen Sie im Layout Folgendes zu WebView hinzu:

    Android:background="@Android:color/transparent"
    Android:layerType="software"
    
  2. Fügen Sie der übergeordneten Bildlaufansicht Folgendes hinzu:

    Android:layerType="software"
    
3
Baton

legen Sie das bg nach dem Laden der HTML-Datei fest (aus schnellen Tests scheint das Laden der HTML-Datei die BG-Farbe zurückzusetzen. Dies ist für 2.3).

wenn Sie die HTML-Datei aus den Daten laden, die Sie bereits erhalten haben, reicht es aus, eine .postDelayed-Anweisung auszuführen, in der Sie einfach die BG (zum Beispiel transparent) einstellen.

2
Lassi Kinnunen

Ausprobieren:

myWebView.setAlpha(0.2f);
0
Abhilash Nair

Ich habe versucht, eine transparente HTML-Überlagerung über meine GL -Ansicht zu legen, aber es hat immer schwarzes Flimmern, was meine GL -Ansicht abdeckt. Nachdem ich einige Tage versucht hatte, dieses Flimmern zu beseitigen, fand ich diesen Workaround, der für mich akzeptabel ist (aber eine Schande für Android).

Das Problem ist, dass ich eine Hardwarebeschleunigung für meine Nice CSS-Animationen brauche und webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); für mich keine Option ist.

Der Trick bestand darin, eine zweite (leere) WebView zwischen meiner Ansicht GL und der HTML-Überlagerung zu setzen. Diese dummyWebView sagte ich im SW-Modus zu rendern, und jetzt werden meine HTML-Overlays in HW glatt und kein schwarzes Flimmern mehr dargestellt.

Ich weiß nicht, ob dies auf anderen Geräten als My Acer Iconia A700 funktioniert, aber ich hoffe, ich könnte damit jemandem helfen.

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

Wenn nichts hilft, haben Sie wahrscheinlich webView eine feste Größe. Ändern Sie die Breite und Höhe in wrap_content oder match_parent. Es sollte funktionieren. Das hat für mich funktioniert, als ich versucht habe, eine Gif zu laden.

0
Hayk
myWebView.setAlpha(0);

ist die beste Antwort. Es klappt!

0
Wooden Ghost

Das hat bei mir funktioniert. Versuchen Sie, die Hintergrundfarbe einzustellen, nachdem die Daten geladen wurden. für diesen setWebViewClient in Ihrem Webview-Objekt wie:

    webView.setWebViewClient(new WebViewClient(){

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

Probieren Sie webView.setBackgroundColor aus (Color.parseColor ("# EDEDED"));

0
raja