Problema de redibujo de WebView al cargar datos

Me encuentro con un problema de mostrar con una webview que estoy usando en una de mi aplicación.

Cuando llamo a 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 modifican la posición del texto, la posición del texto antiguo no se borra y se muestra tanto el texto viejo como el nuevo texto + imagen

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

Problema de redibujo de vista web

Es como si la webview no redibuja correctamente su contenido. Por supuesto un simple invalidate () no funciona …

No ocurre a menudo, pero permite decir una vez más de 20.

Código utilizado para mostrar los datos (llamados fuera de los métodos del ciclo de vida de la 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); 

¿Algúna idea de cómo arreglar esto?

Finalmente he encontrado una manera de arreglar el problema.

Quite el fondo transparente de 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 WebView tiene un fondo en blanco está bien para mí. Tal vez puede ser molesto para alguien más.

Seguro que es un error de WebView.

Con frecuencia he tenido problemas esporádicos con WebViews que no se muestran correctamente después de haber cargado contenido con loadDataWithBaseUrl. Aunque la altura de WebView se estableció en wrap_content, el WebView no siempre redimensionaría para envolver el contenido. En su lugar, la vista web tenía una altura de cero. A veces se muestra bien y otras veces no lo haría. A veces el problema sólo sucedería en una orientación vertical y el paisaje funcionaría bien. Intenté quitar mi llamada de setBackgroundColor pero eso no ayudó. Sin embargo, pude conseguir el problema para ir lejos hoy cambiando el diseño que el WebView estaba adentro de un LinearLayout a un RelativeLayout.

Si establece su WebView en un tamaño específico y no "wrap_content" , después de que se carguen los datos, la vista web no cambia el tamaño de su contenido correctamente.

Creo que es un error con el widget ..

Asi que..
Intente usar "wrap_content" en el atributo layout_height .

Tratar

 mWebView.setBackgroundColor(0x00ff0000); 

Sólo tienes que llamar al método refreshDrawableState () después de llamar al método loadDataWithBaseURL () y resolverá tu problema

 mWebView.loadDataWithBaseURL(null, webtext, "text/html", "UTF-8", null); mWebView.refreshDrawableState(); 
  • Una gran cantidad de NPE de DeviceMotionService suceder recientemente
  • WebView Crash por java.io.IOException: cerrar error: EIO (error de E / S) libcore.io.IoUtils.close (IoUtils.java:41)
  • Evento "reproducir video" en Android WebView
  • El menú desplegable de visualización web de Android no funciona en dispositivos Android 4.x
  • ¿Cómo manejar páginas web "infinitas"?
  • Habilitar teclado de correo electrónico en android para el tipo de entrada de correo electrónico
  • WebView detectar clic en iframe
  • Android Performance XML Drawable vs CSS3 vs Imágenes
  • Obtener recursos de WebView que ya se ha descargado
  • Android No se permite cargar recursos locales: file: /// android_asset
  • Cómo configurar el zoom / ancho inicial para una vista web
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.