Quel est le but de ces interfaces?
CharSequence
est une interface Java standard représentant une séquence de caractères. String
est la mise en œuvre concrète de CharSequence
, suivie de StringBuilder
.
Spanned
est un CharSequence
avec des "travées" indiquant le formatage à appliquer à des parties du texte, où ces travées ne peuvent pas être modifiées.
Spannable
est un Spanned
ajout de la possibilité de modifier les travées (pour ajouter ou supprimer une mise en forme), mais pas pour modifier le texte lui-même.
SpannedString
est une implémentation concrète de l' Spanned
interface.
SpannableString
est une implémentation concrète de l' Spannable
interface.
dans quels scénarios est-il le plus courant de les utiliser?
Lorsqu'il y a une méthode qui en renvoie un (par exemple, getText()
sur un EditText
) ou lorsqu'il y a une méthode qui en prend un comme paramètre (par exemple, setText()
sur a TextView
).
Votre cas d'utilisation cité Html.fromHtml()
est peut-être le plus courant dans le développement Android conventionnel, car un TextView
avec un Spanned
est beaucoup plus léger qu'un WebView
. Cependant, il existe d'autres cas d'utilisation, tels que:
Dans quels cas est-il préférable d'éviter de les utiliser?
Ils sont singulièrement terribles pour lutter contre la calvitie, le déneigement, la réparation de la pompe à chaleur, la fabrication d'un soufflé, etc.
:-)
Y a-t-il des impacts évidents sur les performances à prendre en compte lors de l'utilisation de l'un d'entre eux?
Les interfaces, par définition, n'ont pas d '«impact sur les performances» - elles ne sont qu'une description d'une API.
Je ne suis pas conscient que ce SpannableString
soit beaucoup plus lent que SpannedString
lors d'une opération particulière. Cependant, SpannableStringBuilder
(qui permet de manipuler le texte en plus des étendues qui formate ce texte) peut bien être un peu plus lent que SpannableString
ou SpannedString
pour diverses choses. Le fait que les différences de performances soient suffisantes ou non dépendra de l'utilisation, cependant.
spannableString
et non normale .. parce que je suis confronté à un énorme décalage avecsetText(my_string)
quandmy_string
contient des smileys (comme celui de watsapp) par rapport à une chaîne normale. . (qui n'a que du texte brut) veuillez jeter un peu de lumière ... en quelque sorte, je croyais que les smilleys ne sont rien d'autre que du texte (unicode) seulementImageSpan
ce qui à son tour exigeSpannableString
.Chaîne
A
String
est immuable (c'est-à-dire que le texte ne peut pas changer). Il n'y a pas non plus de portées qui lui sont associées. (Les étendues sont des plages sur le texte qui incluent des informations de style telles que la couleur, la mise en évidence, l'italique, les liens, etc.) Vous pouvez donc utiliser aString
lorsque votre texte n'a pas besoin d'être modifié et n'a pas besoin de style.StringBuilder
A
StringBuilder
a un texte modifiable, vous pouvez donc le modifier sans créer un nouvel objet. Cependant, il ne contient aucune information de portée. C'est juste du texte brut. Utilisez donc unStringBuilder
lorsque vous avez besoin de modifier le texte, mais que vous ne vous souciez pas du style.SpannedString
A
SpannedString
a un texte immuable (comme aString
) et des informations de span immuables. C'est une implémentation concrète des exigences définies par l'Spanned
interface. Utilisez aSpannedString
lorsque votre texte a du style mais que vous n'avez pas besoin de modifier le texte ou le style après sa création.Remarque: Il n'y a pas de telle chose
SpannedStringBuilder
car si le texte changeait, les informations de plage devraient également très probablement changer.SpannableString
A
SpannableString
a un texte immuable, mais ses informations d'étendue sont modifiables. C'est une implémentation concrète des exigences définies par l'Spannable
interface. Utilisez aSpannableString
lorsque votre texte n'a pas besoin d'être modifié mais que le style le fait.SpannableStringBuilder
A
SpannableStringBuilder
a à la fois du texte mutable et des informations d'étendue. Il s'agit d'une implémentation concrète des exigences définies par les interfacesSpannable
etEditable
(entre autres). Utilisez unSpannableStringBuilder
lorsque vous aurez besoin de mettre à jour le texte et son style.CharSequence
A
CharSequence
est une interface et non une classe concrète. Cela signifie qu'il définit simplement une liste de règles à suivre pour toute classe qui l'implémente. Et toutes les classes mentionnées ci-dessus l'implémentent. Vous pouvez donc utiliser unCharSequence
lorsque vous souhaitez généraliser le type d'objet dont vous disposez pour une flexibilité maximale. Vous pouvez toujours le réduire à unString
ouSpannableStringBuilder
ou quoi que ce soit plus tard si vous en avez besoin.la source