2011-08-05 8 views
12

Tengo un problema de visualización con una vista web que estoy usando en una de mis aplicaciones.Problema de redibujado de WebView al cargar datos

Cuando llamo loadData, la vista web primero muestra el texto y luego carga las imágenes de la página (comportamiento estándar).

A veces, si esas imágenes modificar la posición del texto, la posición del texto de edad no está aclarado y tanto el texto antiguo y el nuevo texto + imagen se muestra

Aquí una captura de pantalla de lo que parece cuando se produce el problema:

webview redraw problem

es como la vista web no se vuelve a dibujar correctamente su contenido. Por supuesto, un invalidate sencilla() no funciona ...

Se hacen no se producen a menudo, pero digamos que una vez más de 20.

código utilizado para mostrar los datos (llamada fuera de métodos de ciclo de vida Actividad):

// Include the html headers to the content received from WS 
String webtext = String.format(ConfigApp.HTML_BODY, wsdata.getText()); 
mWebView.setWebChromeClient(...); 
mWebView.setWebViewClient(...); 
mWebView.setBackgroundColor(0); 
mWebView.loadDataWithBaseURL(null, webtext, "text/html", "UTF-8", null); 

¿Alguna idea de cómo solucionar esto?

+0

Sin ver el 'html' datos que está intentando cargar, no podemos ayudar a resolver este problema (ya que puede ser su 'html', no' Android'. – Phil

+0

No puedo provenir del HTML. Se muestra correctamente la mayoría de las veces en el teléfono y no hay ningún problema en Firefox. Parece un problema de actualización/redibujado. –

Respuesta

7

Finalmente he encontrado la manera de solucionar el problema.

eliminar el fondo transparente WebView:

String webtext = String.format(ConfigApp.HTML_BODY, wsdata.getText()); 
mWebView.setWebChromeClient(...); 
mWebView.setWebViewClient(...); 
// mWebView.setBackgroundColor(0); 
mWebView.loadDataWithBaseURL(null, webtext, "text/html", "UTF-8", null); 

Debido a que mi vista web tiene un fondo blanco está bien para mí. Tal vez puede ser molesto para alguien más.

Seguro que es un error de WebView.

+1

Entonces, ¿qué debo hacer si necesito una vista web transparente ... :( –

+0

Lamentablemente, no hay idea. No hay problemas en el rastreador de errores de Android para este problema en particular. Tal vez deberías completar uno. –

+0

@Roman Truba: tuve el mismo problema, necesitaba que mi vista web fuera transparente para que se mostrara del mismo color que el fondo Viewgroup principal. Con suerte, este fondo padre tenía solo un color, así que uso este color para mi fondo de vista web y solucioné el error. – VinceFR

1

Si configura su WebView a un tamaño específico, y no a "wrap_content", luego de cargar los datos, la vista web no cambia el tamaño de su contenido correctamente.

Creo que es un error con el widget ..

Así que ..
intenta utilizar "wrap_content" en el atributo layout_height.

+0

Mi vista web ya está en wrap_content. –

1

Frecuentemente he tenido problemas esporádicos con WebViews que no se muestran correctamente después de haber cargado contenido con loadDataWithBaseUrl. Aunque el alto de WebView se estableció en wrap_content, WebView no siempre cambiaría el tamaño para envolver el contenido. En cambio, la vista web tenía una altura de cero. Algunas veces se mostraría bien y otras veces no. A veces el problema solo ocurre en una orientación vertical y el paisaje funciona bien. Traté de eliminar mi llamada a setBackgroundColor, pero eso no ayudó. Sin embargo, pude solucionar el problema hoy mismo al cambiar el diseño en el que estaba WebView desde LinearLayout a RelativeLayout.

+0

gracias por compartir tu experiencia. Voy a tu solución la próxima vez que enfrente problemas WebView. –

0

Trate

mWebView.setBackgroundColor(0x00ff0000); 
+0

¡Hola y bienvenido a Stackoverflow! Lea la [Guía de cómo responder una pregunta] (http://stackoverflow.com/questions/how-to-answer). Este sitio es un sitio de preguntas y respuestas, no un foro. ¿Puedes agregar algunos más detalles? – slm

0

Sólo hay que llamar refreshDrawableState() después de llamar método loadDataWithBaseURL() método y su resolverá el problema

mWebView.loadDataWithBaseURL(null, webtext, "text/html", "UTF-8", null); 
mWebView.refreshDrawableState(); 
Cuestiones relacionadas