Beste Weg, um ein SpannableString von einem SpannableStringBuilder
Arbeite ich in einem wiki-wie parser, der schafft Spannweiten, die für eine Reihe von markup-Token. Es funktioniert, aber innerhalb der token-iterator ich Häufig benötigen, zu konvertieren, die Teilergebnisse auf einer SpannableStringBuilder
zu einem SpannableString
. Dies wird als ziemlich Häufig, so bin ich nach der effizientesten Lösung, um es zu tun, und vermeiden Sie das erstellen von zusätzlichen Objekten.
Im moment bin ich mit;
SpannableStringBuilder stuff=complex_routine_that_builds_it();
SpannableString result=SpannableString.valueOf(stuff);
Jedoch diese valueOf
Anruf intern baut eine SpannableString
Art von Grund auf, dabei eine toString
und einer Schleife kopieren zugewiesen spans
.
Als SpannableStringBuilder
name schon sagt, ich denke, dass vielleicht, es gibt einen schnelleren Weg, um den SpannableString
aus dem generator. Ist es wahr?
- wenn Sie einige Spannweiten in Ihrem text alles, was Sie brauchen, ist android.text.Überspannt
- ja, ich verstehe es jetzt, den Namen
SpannableStringBuilder
verwirrt mich, bin ich verwendet, um arbeiten mitStringBuffer
dann einString
am Ende, und habe nicht realisiert, dassSpannableStringBuilder
auch implementiertSpanned
,Charsequence
usw ... Der generator ist praktisch für mich, weil der parser hat eine Menge von Operationen auf eingehende Zeichenfolgen zu entfernen markup und schaffen viele unterschiedliche Spannweiten: URL, Farben, Größen, ... im Grunde bin ich das umschreiben der (sehr) langsamHtml.fromHtml
- tolle Idee, ich weiß nicht warum, aber 95% der Kollegen hier verwenden fromHtml, auch wenn der Eingang nicht html : Sie bauen Sie zuerst künstliche html und rufen Sie dann fromHtml, kann ich nicht mehr finden, blöde Sache
- yesss und wenn man sich die Html.java source-code, den Sie wollen einfach nur, um zu sterben... er parst den string in ein XML-SaxParser (!), dann nutzt eine 100kb-Bibliothek Tagsoup, mit mehreren regulären Ausdrücken, die das prüfen auf Wohlgeformtheit, XML-Schemata und so weiter.... nur zu unterstützen, nur Fett, Kursiv, überschriften und Farben, etwas, das ich getan habe, mit etwa 150 Zeilen und ist 10 mal schneller!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Notwendigkeit, zu konvertieren, ein
SpannableStringBuilder
zu einemSpannableString
wenn Sie es direkt benutzen kann, wie in einemTextView
:Als die Frage bereits zeigte, konnte man die Konvertierung machen, wenn Sie unbedingt mussten durch
aber Sie sollten überlegen, warum Sie würden auch brauchen, um machen, dass die Umstellung? Verwenden Sie einfach die original -
SpannableStringBuilder
.SpannableString
vsSpannableStringBuilder
Den Unterschied zwischen diesen beiden ist ähnlich wie der Unterschied zwischen
String
undStringBuilder
. EinString
ist unveränderlich, aber Sie können den text ändern, der in einemStringBuilder
.Ähnlich, den text in einem
SpannableString
unveränderlich ist, während der text in einerSpannableStringBuilder
ist veränderbar. Es ist wichtig zu beachten Sie jedoch, dass dies nur für den text. Die Spannweiten auf beide (und noch einSpannableString
) kann geändert werden.Verwandte