Estilo de fondo de Android WebView color de fondo: transparente ignorado en Android 2.2
background transparency (19)
Estoy luchando por crear una WebView con fondo transparente.
webView.setBackgroundColor(0x00FFFFFF);
webView.setBackgroundDrawable(myDrawable);
Luego cargo una página html con
<body style="background-color:transparent;" ...
El color de fondo de WebView es transparente, pero tan pronto como se carga la página, se sobrescribe con un fondo negro de la página html. Esto solo ocurre en Android 2.2, funciona en Android 2.1.
Entonces, ¿hay algo que agregar en el código de la página html para que sea realmente transparente?
Lo más importante no fue mencionado.
El html debe tener una etiqueta de body
con background-color
establecido en transparent
.
Entonces la solución completa sería:
HTML
<body style="display: flex; background-color:transparent">some content</body>
Actividad
WebView wv = (WebView) findViewById(R.id.webView);
wv.setBackgroundColor(0);
wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
wv.loadUrl("file:///android_asset/myview.html");
Así es como lo haces:
Primero haga que su proyecto base en 11, pero en AndroidManifest establezca minSdkVersion en 8
android: hardwareAccelerated = "false" no es necesario, y es incompatible con 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);
}
});
Por seguridad, ponga esto en su estilo:
BODY, HTML {background: transparent}
funcionó para mí en 2.2 y 4
El código siguiente funciona para mí, aunque tengo varias vistas web y el desplazamiento entre ellas es un poco lento.
v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p);
El siguiente código funciona bien con Android 3.0+ pero cuando pruebas este código debajo de Android 3.0, tu aplicación se cierra con fuerza.
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
Intenta utilizar el código siguiente en su API 11 inferior .
webview.setBackgroundColor(Color.parseColor("#919191"));
O
también puedes probar el siguiente código, que funciona bien con todas las API .
webview.setBackgroundColor(Color.parseColor("#919191"));
if (Build.VERSION.SDK_INT >= 11) {
webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
}
código anterior uso completo para mí.
En la parte inferior de este problema mencionado anteriormente hay una solución. Es una combinación de 2 soluciones.
webView.setBackgroundColor(Color.TRANSPARENT);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
Al agregar este código al WebViewer después de cargar la url, funciona (API 11+).
Incluso funciona cuando la aceleración de hardware está activada
En realidad es un error y nadie encontró una solución hasta el momento. Un problema ha sido creado. El error todavía está aquí en honeycomb.
Destaca si crees que es importante: http://code.google.com/p/android/issues/detail?id=14749
Estaba intentando colocar una superposición de HTML transparente sobre mi vista GL, pero siempre tiene un parpadeo negro que cubre mi vista GL. Después de varios días tratando de deshacerme de este parpadeo encontré esta solución que es aceptable para mí (pero una pena para Android).
El problema es que necesito aceleración de hardware para mis bonitas animaciones de CSS y así webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
no es una opción para mí
El truco fue poner un segundo WebView
(vacío) entre mi vista GL y la superposición HTML. Este dummyWebView
dije que renderizara en modo SW, y ahora mis superposiciones de HTML se renderizan sin problemas en HW y no parpadean más.
No sé si esto funciona en otros dispositivos que no sean My Acer Iconia A700, pero espero poder ayudar a alguien con esto.
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);
}
}
Esto funcionó para mí,
mWebView.setBackgroundColor(Color.TRANSPARENT);
Esto funcionó para mí. intente configurar el color de fondo después de cargar los datos. para ese setWebViewClient en su objeto webview como:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
webView.setBackgroundColor(Color.BLACK);
}
});
Probar:
myWebView.setAlpha(0.2f);
Pruebe webView.setBackgroundColor(0);
Pruebe webView.setBackgroundColor (Color.parseColor ("# EDEDED"));
Si la vista web es desplazable:
Agregue esto al Manifiesto:
android:hardwareAccelerated="false"
O
Agregue lo siguiente a WebView en el diseño:
android:background="@android:color/transparent" android:layerType="software"
Agregue lo siguiente a la vista de desplazamiento de los padres:
android:layerType="software"
Tuve el mismo problema con 2.2 y también en 2.3. Resolví el problema al dar el valor de alpa en html no en Android. Intenté muchas cosas y lo que descubrí es setBackgroundColor();
el color no funciona con el valor alfa. webView.setBackgroundColor(Color.argb(128, 0, 0, 0));
no trabajará.
así que aquí está mi solución, funcionó para mí.
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>");
Y en Java,
webView = (WebView) findViewById(R.id.webview);
webView.setBackgroundColor(0);
webView.loadData(webData, "text/html", "UTF-8");
Y aquí está la captura de pantalla de salida a continuación.
Utilizar esta
WebView myWebView = (WebView) findViewById(R.id.my_web);
myWebView.setBackgroundColor(0);
configure el bg después de cargar el html (de las pruebas rápidas parece que cargar el html restablece el color bg ... esto es para 2.3).
Si está cargando el html a partir de los datos que ya obtuvo, bastará con hacer un .postDelayed en el que simplemente configure el bg (por ejemplo, transparente).
Solo usa estas líneas .....
webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);
Y recuerde un punto que establece siempre el color de fondo después de cargar datos en la vista web.
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
esto definitivamente funcionará ... establece el fondo en XML con Editbackground. Ahora ese fondo se mostrará
- Después de probar todo lo anterior. Encontré que no importa tampoco especifiques
webView.setBackgroundColor(Color.TRANSPARENT)
antes o después deloadUrl()
/loadData()
. - Lo que importa es que debes declarar explícitamente
android:hardwareAccelerated="false"
en el manifiesto.
Probado en IceCream Sandwich