Android: Wie kombiniere ich Spannable.setSpan mit String.format?

8

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?

    
Salw 26.08.2011, 10:36
quelle

3 Antworten

2

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.

    
Salw 05.09.2011, 07:17
quelle
2

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:

%Vor%     
George Steel 30.11.2014 07:23
quelle
0

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:

%Vor%

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.

    
Peter Thaus 13.04.2016 09:19
quelle

Tags und Links