HTML.fromHtml Saltos de línea que desaparecen

Estoy tomando el texto extenso de un cuadro de EditText y convertirlo a una cadena etiquetada HTML usando HTML.toHtml. Esto funciona bien. He verificado que la cadena es correcta y contiene una
En el lugar apropiado. Sin embargo, cuando llegué a convertir la cadena etiquetada de nuevo a un texto extendido para rellenar un TextView o EditText utilizando HTML.fromHtml el
(O varios si están presentes) al final del primer párrafo desaparecen. Esto significa que si un usuario introdujo texto con múltiples saltos de línea y quería mantener ese formato se pierde.

Adjunto una foto para ayudar a ilustrar esto. El primer EditText es la entrada del usuario, el TextView debajo es el resultado HTML.tohtml del EditText encima de él, el EditText debajo se rellena usando HTML.fromHtml usando la cadena en el TextView encima de él. Como se puede ver los saltos de línea han desaparecido y por lo que tienen las líneas extra. Además, cuando el texto extendido del segundo texto de edición se ejecuta a través de HTML.toHtml, ahora produce una cadena etiquetada HTML diferente. Introduzca aquí la descripción de la imagen

Me gustaría poder tomar la cadena etiquetada HTML del primer EditText y poblar otros TextViews o EditTexts sin perder los saltos de línea y formatear. Cualquier sugerencia sería útil.

Gracias

También tuve este problema y no pude encontrar una fácil "transformar" o algo similar solución. Tenga en cuenta algo importante, cuando el usuario presiona "enter" java produce el carácter especial \n pero en HTML no existe un formato para la ruptura de línea. Es el <br /> .

Así que lo que he hecho fue reemplazar algunos CharSequence específicos, a partir del texto sin formato, por el formato HTML alternativo. En mi caso, sólo había el "entrar" carácter por lo que no era tan desordenado.

Tuve un problema similar cuando estaba tratando de guardar / restaurar el contenido editText a db. El problema está en Html.toHtml, de alguna manera salta frenos de línea:

  String src = "<p dir=\"ltr\">First line</p><p dir=\"ltr\">Second<br/><br/><br/></p><p dir=\"ltr\">Third</p>"; EditText editText = new EditText(getContext()); // All line brakes are correct after this editText.setText(new SpannedString(Html.fromHtml(src))); String result = Html.toHtml(editText.getText()); // Here breaks are lost // Output :<p dir="ltr">First line</p><p dir="ltr">Second<br></p><p dir="ltr">Third</p> 

He resuelto esto usando la función toHtml personalizada para serializar el texto dividido, y reemplazó todos los '\ n' con "<br />:

  public class HtmlParser { public static String toHtml(Spannable text) { final SpannableStringBuilder ssBuilder = new SpannableStringBuilder(text); int start, end; // Replace Style spans with <b></b> or <i></i> StyleSpan[] styleSpans = ssBuilder.getSpans(0, text.length(), StyleSpan.class); for (int i = styleSpans.length - 1; i >= 0; i--) { StyleSpan span = styleSpans[i]; start = ssBuilder.getSpanStart(span); end = ssBuilder.getSpanEnd(span); ssBuilder.removeSpan(span); if (span.getStyle() == Typeface.BOLD) { ssBuilder.insert(start, "<b>"); ssBuilder.insert(end + 3, "</b>"); } else if (span.getStyle() == Typeface.ITALIC) { ssBuilder.insert(start, "<i>"); ssBuilder.insert(end + 3, "</i>"); } } // Replace underline spans with <u></u> UnderlineSpan[] underSpans = ssBuilder.getSpans(0, ssBuilder.length(), UnderlineSpan.class); for (int i = underSpans.length - 1; i >= 0; i--) { UnderlineSpan span = underSpans[i]; start = ssBuilder.getSpanStart(span); end = ssBuilder.getSpanEnd(span); ssBuilder.removeSpan(span); ssBuilder.insert(start, "<u>"); ssBuilder.insert(end + 3, "</u>"); } replace(ssBuilder, '\n', "<br/>"); return ssBuilder.toString(); } private static void replace(SpannableStringBuilder b, char oldChar, String newStr) { for (int i = b.length() - 1; i >= 0; i--) { if (b.charAt(i) == oldChar) { b.replace(i, i + 1, newStr); } } } } 

También resultó que esta forma es más rápida en alrededor de 4 veces que el valor predeterminado Html.toHtml (): He hecho un punto de referencia con alrededor de 20 páginas y 200 tramos:

  Editable ed = editText.getText(); // Here is a Tao Te Ching :) String result = ""; DebugHelper.startMeasure("Custom"); for (int i = 0; i < 10; i++) { result = HtmlParserHelper.toHtml(ed); } DebugHelper.stopMeasure("Custom"); // 19 ms DebugHelper.startMeasure("Def"); for (int i = 0; i < 10; i++) { result = Html.toHtml(ed); } DebugHelper.stopMeasure("Def"); // 85 ms 

Reemplazar / n => <br> <br>

ejemplo

<P> hola </ p> <p> j </ p>

a:

<P> Hola </ p> <br> <p> <p> j </ p>

  • Android ScrollView scrollTo () método no funciona con TextView?
  • Deteniendo texto de división a varias líneas en los períodos en direcciones web
  • Cómo RelativeLayout Alinear Center android
  • Cómo establecer el color del texto en una vista de texto mediante programación
  • Establecer una cadena spannable no funciona en una simple Textview
  • Cómo evitar que las URL se envuelvan en TextView?
  • Android deshabilitar evento onclick cuando los vínculos de url hicieron clic
  • Tools: text para artículos de RecyclerView
  • Cómo abreviar un TextView?
  • ¿Cuál es el color predeterminado para el texto en textview?
  • 2 colores diferentes para texto en la misma vista de texto en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.