HTML.fromHtml Zeilenumbrüche verschwinden

Ich nehme gespannte Text aus einer EditText-Box und konvertiert sie in eine HTML-markierte Zeichenfolge mit HTML.toHtml. Das geht gut Ich habe überprüft, dass die Saite korrekt ist und enthält eine
An der entsprechenden Stelle. Allerdings, wenn ich die markierte Zeichenfolge wieder in einen überspannten Text umwandeln, um eine TextView oder EditText mit HTML.fromHtml zu füllen
(Oder mehrere, wenn sie vorhanden sind) am Ende des ersten Absatzes verschwinden. Dies bedeutet, dass, wenn ein Benutzer Text mit mehreren Zeilenumbrüchen eingegeben und diese Formatierung behalten wollte, geht es verloren.

Ich habe ein Bild beigefügt, um das zu illustrieren. Der erste EditText ist die Benutzereingabe, die TextView Unten ist es das HTML.tohtml Ergebnis des EditText darüber, das EditText unten ist es mit HTML.fromHtml mit dem String in der TextView über ihm gefüllt. Wie Sie sehen können, sind die Zeilenumbrüche verschwunden und haben so die zusätzlichen Zeilen. Außerdem, wenn der überspannte Text des zweiten Edit-Textes durch die HTML.toHtml ausgeführt wird, erzeugt er nun einen anderen HTML-markierten String. Bildbeschreibung hier eingeben

  • Wie kann man überprüfen, ob aktueller Thread nicht Hauptthread ist
  • Wie man einen Hinweis in EditText mit inputType = "numberDecimal" hinzufügt?
  • Rufen Sie den .NET-Webdienst in Android auf
  • Verwenden von MessagePack mit Android
  • Verwenden der Kamera-Aktivität in Android
  • Unterschied zwischen Fragment und FragmentActivity
  • Ich möchte in der Lage sein, die HTML-markierten String aus dem ersten EditText zu nehmen und andere TextViews oder EditTexts zu füllen, ohne Zeilenumbrüche und Formatierungen zu verlieren. Irgendwelche Vorschläge wäre hilfreich.

    Vielen Dank

  • Anwendungsfehler: Diese Version der Anwendung ist nicht für Market Billing konfiguriert
  • Stick-Ansicht an der Unterseite des Fragments eines Viewpagers im Koordinator-Layout
  • 'Rollout auf Beta starten' deaktiviert in Play Store Developer Console
  • Android ADT Fehler, dx.jar wurde nicht aus dem SDK Ordner geladen
  • CreateWindowSurface fehlgeschlagen: EGL_BAD_MATCH?
  • GCM Register SERVICE_NOT_AVAILABLE
  • 3 Solutions collect form web for “HTML.fromHtml Zeilenumbrüche verschwinden”

    Ich hatte auch dieses Problem und ich konnte nicht finden, eine einfache "transform" oder etwas gleichermaßen Lösung. Beachten Sie etwas Wichtiges, wenn der Benutzer drückt "enter" java produziert das spezielle Zeichen \n aber in HTML gibt es kein solches Format für Zeilenumbruch. Es ist das <br /> .

    Also, was ich getan habe, war, einige spezifische CharSequence s, aus dem Klartext, durch das alternative HTML-Format zu ersetzen. In meinem Fall gab es nur den "Enter" Charakter, also war es nicht so chaotisch.

    Ich hatte ein ähnliches Problem, als ich versuchte zu speichern / wiederherstellen editText Inhalt zu db. Das Problem ist in Html.toHtml, es irgendwie überspringt Linienbremsen:

      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> 

    Ich habe das durch die benutzerdefinierte toHtml-Funktion gelöst, um den überspannten Text zu serialisieren und alle '\ n' mit "<br /> zu ersetzen:

      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); } } } } 

    Auch es stellte sich heraus, dass dieser Weg in etwa 4 mal so viel schneller ist. Html.toHtml (): Ich habe einen Benchmark mit ca. 20 Seiten und 200 Spannen gemacht:

      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 

    Ersetzen / n => <br> <br>

    Beispiel

    <P> hi </ p> <p> j </ p>

    nach:

    <P> hi </ p> <br> <br> <p> j </ p>

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.