Ich setze Span
auf einen Teil des Textes. Span selbst funktioniert gut. Allerdings wird der Text von String.format
von Resources
erstellt und ich weiß nicht start
und end
des Teils im Text, für den ich Span einstellen werde.
Ich habe versucht, benutzerdefinierte HTML-Tags in strings.xml
zu verwenden, aber entweder getText
oder getString
entfernen sie. Ich könnte so etwas wie getString(R.string.text, "<nb>" + arg + "</nb>")
, dann Html.fromHtml()
verwenden, weil arg
genau dort ist, wo ich den Span einstellen möchte.
Ich habe diesen Ansatz gesehen, bei dem textformatierte "normal text ##span here## normal text"
verwendet wurde. . Es analysiert die Zeichenfolge entfernt Tags und setzt Span.
Meine Frage ist, gibt es einen besseren Weg, um Span in eine formatierte Zeichenfolge wie "something %s something"
zu setzen oder sollte ich einen der obigen Ansätze verwenden?
Ich habe das gelöst, indem ich TaggedArg
class eingeführt habe, Instanzen dieser Klasse werden auf <tag>value</tag>
erweitert. Dann habe ich ein Objekt erstellt, das für das Lesen von Text mit Tags zuständig ist und diese Tags durch Spannen ersetzt. Verschiedene Bereiche werden in map tag- & gt; factory registriert.
Es gab eine kleine Überraschung. Wenn Sie einen Text wie "<xx>something</xx> something"
haben, liest Html.fromHtml
diesen Text als "<xx>something something</xx>"
. Ich musste Tags <html>
um den gesamten Text hinzufügen, um dies zu verhindern.
getText()
gibt SpannedString
Objekte zurück, die die in strings.xml definierte Formatierung enthalten. Ich habe eine benutzerdefinierte Version von String.format
erstellt. , die alle Spannen in der Formatzeichenfolge beibehalten, sogar wenn sie Formatbezeichner einschließen (die Abschnitte in SpannedString
-Argumente werden ebenfalls beibehalten). Benutze es so:
Der Weg von getText()
, den George vermutete, ist interessant. Aber es besteht keine Notwendigkeit, eine zusätzliche Klasse zu schreiben. getText()
gibt eine CharSequence
zurück. Verwenden Sie also SpannableStringBuilder
, um dies auf eine TextView zu setzen:
In Ihrer strings.xml können Sie sie mit html-tags schreiben (vergessen Sie nicht die Zitate vor und nach dem Text):
%Vor%Diese Art der Markierung funktionierte für mich, indem ich sie manuell auf eine textView (wie oben) setzte oder sie in einem Layout zuordnete.