Je définit J'ai essayé d'utiliser des balises HTML personnalisées dans J'ai vu Cette approche qui a utilisé le texte formé Ma question est la meilleure façon d'accomplir la couverture dans une chaîne formée comme span code> à une partie du texte. Span elle-même fonctionne bien. Cependant, le texte est créé par
string.format code> à partir de
ressources code> et je ne sais pas
Démarrer code> et
fin code> de la partie in le texte que je vais mettre en place. p>
strings.xml code>, mais
gettext code> ou
getstring code> supprimez-les. Je pourrais utiliser quelque chose comme ça
getstring (r.string.text, "
html.fromhtml () code> , parce que le
arg code> est exactement où je veux définir la portée. P>
"Texte normal ## spann ici ## Texte normal" code>. Il analyse la chaîne supprime les étiquettes et les ensembles. P>
"quelque chose% s quelque chose" de code> ou devrais-je utiliser l'une des approches ci-dessus? P>
4 Réponses :
J'ai résolu ceci en introduisant Il y avait une petite surprise. Si vous avez du texte comme taggedarg code> classe, les instances de cette classe se développent à
"
html.fromhtml code> lit ce texte comme
"
code> autour du texte entier pour éviter cela. P>
gettext () code> retournera
SpanNedString code> d'objets contenant le formatage défini dans strings.xml. J'ai créé une personnalisation Version de
String.Format CODE>
qui conservera des effectifs dans la chaîne de format, même de ceux-ci joignent des spécificateurs de format (couvre-échantillons dans SpanNedString des arguments code> sont également préservés). Utilisez-le comme ceci:
Spanned toDisplay = SpanFormatter.format(getText(R.string.foo), bar, baz, quux);
La solution de George a parfaitement travaillé. Contrairement à certaines des autres solutions ici, George résout le problème d'essayer de remplacer les chaînes en utilisant le formateur habituel, tel que % 1 $ s code> qui peut être trouvé dans le fichier Strings.xml. Sa classe SPANFORDERSER fonctionne aussi facilement que la chaîne.Format, mais renvoie le SpanNedString pour travailler.
Bizarre, qu'il n'y a toujours pas de soutien officiel Android pour cette fonctionnalité simple mais toujours importante.
La voie par dans votre string.xml Vous pouvez l'écrire avec des balises HTML (n'oubliez pas les citations avant et après le texte): p> Ce type de marquage a fonctionné pour moi soit la réglage manuellement vers un TextView (comme ci-dessus) ou l'attribuer dans une mise en page. P> p> gettext () code> que George supposé est intéressant. Mais il n'y a pas besoin d'écrire une classe supplémentaire.
gettext () code> renvoie un
charcuternence code>. Donc, utilisez
SpannablestringBuilder code> pour définir ceci sur un TextView:
Et si vous avez des paramètres pour la chaîne? Signification "Hello% S" dans le fichier Strings.xml, par exemple?
J'ai décidé d'écrire une version de Kotlin de ce qui a été offert ici par George, au cas où le lien disparaît un jour: