2012-02-14 8 views
13

Algunos antecedentes de esta pregunta están aquí. Se trata de solucionar un error conocido en Android donde el fondo de WebView debe ser transparente. Android WebView style background-color:transparent ignored on android 2.2WebView transparente que no funciona en Android v4.0

Implica un WebView, que aloja un documento HTML con un fondo transparente, por lo que el WebView es transparente y el documento HTML se puede superponer a otras vistas.

Agregando el siguiente método a la subclase WebView y llamándolo desde el constructor funciona para mí en Android v2, v3 y v4, EXCEPTO cuando la altura del pixel del WebView es mayor que la altura de la pantalla en píxeles (por ejemplo, la WebView está en un ScrollView, por lo que es más largo que la pantalla).

protected void setBackgroundToTransparent() { 
    this.setBackgroundColor(Color.TRANSPARENT); 
    this.setBackgroundDrawable(null); 
    if (Build.VERSION.SDK_INT >= 11) // Android v3.0+ 
     try { 
     Method method = View.class.getMethod("setLayerType", int.class, Paint.class); 
     method.invoke(this, 1, new Paint()); // 1 = LAYER_TYPE_SOFTWARE (API11) 
     } catch (Exception e) {} 
} 
+0

¿Hay alguna pregunta aquí o quizás la haya respondido dentro de la pregunta? –

+0

Pensé que estaba claro que la pregunta es cómo puedo solucionar el problema para que funcione correctamente WebView transparente. –

+0

¿Entonces la pregunta es cómo hacer que funcione también para la excepción? De todos modos, parece funcionar cuando lo pruebo en el simulador incluso en 4.0. –

Respuesta

1

pasé un par de horas en esto el otro día y trataron cada respuesta no es posiblemente sobre el tema, así como la investigación de las cosas a mí mismo. Llegué a su mismo problema donde si la vista web fuera desplazable, no sería transparente. La única forma en que podría hacerlo transparente es si desactivo la renderización de GPU en Configuración> Opciones de desarrollador. Eventualmente hice un chequeo para ver si la renderización gpu estaba habilitada y luego establecí el fondo en el color que mejor se ajustaba. Si se te ocurre una solución, me impresionaría escucharla.

+0

Ver arriba.Además, no puede obligar a todos sus usuarios a activar la representación de GPU. – bluewhile

9

He tenido un problema similar con el nivel API androide 16 y esto lo resolvió:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 'view' is a WebView 

Esto desactiva la aceleración de hardware en la vista según la documentación: http://developer.android.com/guide/topics/graphics/hardware-accel.html

Yo sé que no es el camino a seguir, pero dado que se trata de un problema conocido, util se les ocurre una solución adecuada, este hace el trabajo (al menos para mí).

10

He encontrado el mismo problema y lo que encontré es que esto es un error en algunas versiones de Android con respecto a la aceleración de hardware. La respuesta anterior de Spiri funciona, pero necesitaba mi WebView para acelerar el hardware porque necesita reproducir videos. Lo que he encontrado funciona bien, es la siguiente:

En lugar de utilizar

mWebView.setBackgroundColor(Color.TRANSPARENT); 

lo que utilicé fue:

mWebView.setBackgroundColor(Color.argb(1, 255, 255, 255)); 

Esto funcionó en todos los dispositivos Android, donde estaba teniendo previamente esta cuestión .

+1

Esto es más como una corrección de errores, no establece alfa en 0 sino en 1 (desde 255), que es casi invisible pero el hardware todavía lo renderizará. – bluewhile

+0

eres un genio –

Cuestiones relacionadas