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?
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
Das hat für mich funktioniert,
mWebView.setBackgroundColor(Color.TRANSPARENT);
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
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.
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
Für die HTML-Datei must ist ein Tagbody
mit background-color
auf transparent
gesetzt.
<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");
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.
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);
Versuchen Sie es mit webView.setBackgroundColor(0);
webView.setBackgroundColor(Color.TRANSPARENT)
vor oder nach loadUrl()
loadData()
.Android:hardwareAccelerated="false"
explizit im Manifest angeben.Getestet am _/IceCream Sandwich
Benutze das
WebView myWebView = (WebView) findViewById(R.id.my_web);
myWebView.setBackgroundColor(0);
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.
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
Wenn Webview scrollbar ist:
Fügen Sie das Manifest hinzu:
Android:hardwareAccelerated="false"
OR
Fügen Sie im Layout Folgendes zu WebView hinzu:
Android:background="@Android:color/transparent"
Android:layerType="software"
Fügen Sie der übergeordneten Bildlaufansicht Folgendes hinzu:
Android:layerType="software"
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.
Ausprobieren:
myWebView.setAlpha(0.2f);
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);
}
}
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.
myWebView.setAlpha(0);
ist die beste Antwort. Es klappt!
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);
}
});
Probieren Sie webView.setBackgroundColor aus (Color.parseColor ("# EDEDED"));