textfeld - android.text auslesen




Android Spanned, SpannedString, Spannable, SpannableString und CharSequence (2)

Android bietet eine Vielzahl von Schnittstellen, die sich alle auf Text und Strings Spanned : Spanned , SpannedString , Spannable , SpannableString und CharSequence .

Ich habe alle oben genannten in verschiedenen Szenarien in der Regel nach der Verwendung von Html.fromHtml() , um verknüpfbaren Text in einem TextView , um etwas Styling darauf anzuwenden.

Ich habe versucht, den Zweck / die Verwendung dieser Schnittstellen aus der offiziellen Android-Dokumentation zu verstehen und habe versagt, da es ziemlich verwirrend ist. Was ist der Zweck dieser Schnittstellen? In welchen Szenarien ist es meistens üblich, sie zu benutzen? In welchen Fällen ist es am besten, sie zu vermeiden? Gibt es offensichtliche Leistungseinbußen, die bei der Verwendung eines dieser Faktoren berücksichtigt werden müssen?

Wenn jemand eine anständige Erklärung liefern könnte, würde es sehr geschätzt werden.


Was ist der Zweck dieser Schnittstellen?

CharSequence ist eine Standard-Java-Schnittstelle, die eine Zeichenfolge darstellt. String ist die am häufigsten verwendete konkrete Implementierung von CharSequence , gefolgt von StringBuilder .

Spanned ist eine CharSequence mit " CharSequence ", die angibt, dass die Formatierung auf Teile des Textes angewendet werden soll, wobei diese Bereiche nicht geändert werden können.

Spannable ist ein Spanned und fügt die Möglichkeit hinzu, die Spannen zu ändern (um Formatierungen hinzuzufügen oder zu entfernen), aber nicht um den Text selbst zu ändern.

SpannedString ist eine konkrete Implementierung der Spanned Schnittstelle.

SpannableString ist eine konkrete Implementierung der Spannable Schnittstelle.

In welchen Szenarien ist es meistens üblich, sie zu benutzen?

Wenn es eine Methode gibt, die eine zurückgibt (zB getText() in einem EditText ) oder wenn es eine Methode gibt, die eine als Parameter nimmt (zB setText() in einer TextView ).

Ihr zitierter Fall der Verwendung von Html.fromHtml() ist vielleicht die üblichste in der herkömmlichen Android-Entwicklung, da ein TextView mit einem Spanned viel leichter ist als ein WebView . Es gibt jedoch andere Anwendungsfälle, z.

In welchen Fällen ist es am besten, sie zu vermeiden?

Sie sind einzigartig schlecht im Kampf gegen Haarausfall, Schneeräumung, Reparatur von Wärmepumpen, Soufflé, usw.

:-)

Gibt es offensichtliche Leistungseinbußen, die bei der Verwendung eines dieser Faktoren berücksichtigt werden müssen?

Schnittstellen haben definitionsgemäß keine "Performance Impacts" - sie sind lediglich eine Beschreibung einer API.

Ich bin mir nicht bewusst, dass SpannedString bei einer bestimmten Operation wesentlich langsamer als SpannedString . SpannableStringBuilder (der es ermöglicht, den Text zusätzlich zu den SpannableString SpannedString , die diesen Text formatieren) kann jedoch für verschiedene Dinge SpannedString etwas langsamer als SpannableString oder SpannedString . Ob die Leistungsunterschiede ausreichen, ist abhängig von der Verwendung.


String

Ein String ist unveränderbar (dh der Text kann nicht geändert werden). Es hat auch keine damit verbundenen Spannen. (Spans sind Bereiche über dem Text, die Formatierungsinformationen wie Farbe, Hervorhebung, Kursivschrift, Links usw. enthalten.) Sie können also eine String wenn Ihr Text nicht geändert werden muss und kein Styling benötigt wird.

StringBuilder

Ein StringBuilder verfügt über veränderbaren Text, sodass Sie ihn ändern können, ohne ein neues Objekt zu erstellen. Es hat jedoch keine Span-Informationen. Es ist nur einfacher Text. Verwenden Sie daher einen StringBuilder wenn Sie den Text ändern müssen, aber Sie möchten ihn nicht stylen.

SpannedString

Eine SpannedString hat unveränderlichen Text (wie eine SpannedString ) und unveränderliche Span-Informationen. Es ist eine konkrete Implementierung der Anforderungen, die von der Spanned Schnittstelle definiert werden. Verwenden Sie einen SpannedString wenn Ihr Text SpannedString ist, Sie aber weder den Text noch den Stil ändern müssen, nachdem er erstellt wurde.

Hinweis: Es gibt keinen " SpannedStringBuilder denn wenn sich der Text ändert, müssten sich auch die Span-Informationen sehr wahrscheinlich ändern.

SpannableString

Ein SpannableString hat unveränderlichen Text, aber seine SpannableString sind veränderbar. Es ist eine konkrete Umsetzung der Anforderungen, die von der Schnittstelle Spannable definiert werden. Verwenden Sie einen SpannableString wenn Ihr Text nicht geändert werden muss, aber das Styling.

SpannableStringBuilder

Ein SpannableStringBuilder enthält sowohl veränderbare Text- als auch Span-Informationen. Es ist eine konkrete Umsetzung der Anforderungen, die unter anderem von den Schnittstellen Spannable und Editable definiert werden. Verwenden Sie einen SpannableStringBuilder wenn Sie den Text und seinen Stil aktualisieren müssen.

CharSequence

Eine CharSequence ist eine Schnittstelle und keine konkrete Klasse. Das bedeutet, dass es nur eine Liste von Regeln definiert, die für jede Klasse, die es implementiert, zu befolgen sind. Und alle oben genannten Klassen implementieren es. Sie können also eine CharSequence wenn Sie den Objekttyp für maximale Flexibilität verallgemeinern möchten. Sie können es jederzeit zu einem String oder SpannableStringBuilder oder was auch immer später bei Bedarf SpannableStringBuilder .







android-textview