De plus, selon la façon dont vous utilisez votre chaîne de ressources, vous devrez peut-être mettre les balises gras / italique dans un bloc CDATA afin qu'elles ne soient pas analysées jusqu'à ce qu'elles soient utilisées par Html.fromHtml(): ... <![CDATA[<b><i>so</i></b>]]>...
dule
133
Pour quiconque a trouvé la documentation officielle Android un peu trop vague à ce sujet: si vous utilisez des balises comme <b> dans votre ressource de chaîne, assurez-vous de la récupérer en utilisant getText(R.string.whatever)plutôt quegetString(R.string.whatever)
andygeers
1
n'est-ce pas censé être à la nameplace de id?
Hendra Anggrian
4
Donc pas besoin de Html.fromHtmlou Spannable. Utilisez simplement getText(R.string.whatever)comme @andygeers mentionné.
Alaa M.
1
@andygeers Que pouvons-nous faire pour une chaîne comme "Mon nom est <b>% s </b>" qui ne peut pas utiliser getText car elle n'accepte qu'un seul paramètre?
Taylor le
45
Utilisez la balise html dans les ressources de chaîne: -
<resources><stringname="string_resource_name"><![CDATA[<b> Your text </b>]]> </string></resources>
Et obtenez du texte en gras à partir de ressources de chaîne comme: -
privateSpanned getSpannedText(String text){if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.N){returnHtml.fromHtml(text,Html.FROM_HTML_MODE_COMPACT);}else{returnHtml.fromHtml(text);}}String s = format(context.getResources().getString(R.string.string_resource_name));
textView.setText(getSpannedText(s));
c'est la meilleure réponse et cela fonctionne totalement pour les personnes qui utilisent @BindingAdapter. Merci frère.
Sup.Ia
44
Comme l'a dit David Olsson, vous pouvez utiliser du HTML dans vos ressources de chaîne:
<resource><stringname="my_string">A string with <i>actual</i><b>formatting</b>!</string></resources>
Ensuite, si vous utilisez getText(R.string.my_string)plutôt que getString(R.string.my_string)vous récupérez un CharSequenceplutôt qu'un Stringqui contient la mise en forme incorporée.
Que faire si votre chaîne est une quantité à laquelle vous devez ajouter un nombre?
Taylor le
getText ne vous permet pas d'utiliser des espaces réservés
Vincent_Paing
11
Dans kotlin, vous pouvez créer des fonctions d'extensions sur les ressources (activités | fragments | contexte) qui convertiront votre chaîne en une étendue html
par exemple
fun Resources.getHtmlSpannedString(@StringRes id:Int):Spanned= getString(id).toHtmlSpan()
fun Resources.getHtmlSpannedString(@StringRes id:Int, vararg formatArgs:Any):Spanned= getString(id,*formatArgs).toHtmlSpan()
fun Resources.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int):Spanned= getQuantityString(id, quantity).toHtmlSpan()
fun Resources.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int, vararg formatArgs:Any):Spanned= getQuantityString(id, quantity,*formatArgs).toHtmlSpan()
fun String.toHtmlSpan():Spanned=if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.N){Html.fromHtml(this,Html.FROM_HTML_MODE_LEGACY)}else{Html.fromHtml(this)}
Usage
//your strings.xml<string name="greeting"><![CDATA[<b>Hello%s!</b><br>]]>This is newline</string>//in your fragment or activity
resources.getHtmlSpannedString(R.string.greeting,"World")
MODIFIER encore plus d'extensions
fun Context.getHtmlSpannedString(@StringRes id:Int):Spanned= getString(id).toHtmlSpan()
fun Context.getHtmlSpannedString(@StringRes id:Int, vararg formatArgs:Any):Spanned= getString(id,*formatArgs).toHtmlSpan()
fun Context.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int):Spanned= resources.getQuantityString(id, quantity).toHtmlSpan()
fun Context.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int, vararg formatArgs:Any):Spanned= resources.getQuantityString(id, quantity,*formatArgs).toHtmlSpan()
fun Activity.getHtmlSpannedString(@StringRes id:Int):Spanned= getString(id).toHtmlSpan()
fun Activity.getHtmlSpannedString(@StringRes id:Int, vararg formatArgs:Any):Spanned= getString(id,*formatArgs).toHtmlSpan()
fun Activity.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int):Spanned= resources.getQuantityString(id, quantity).toHtmlSpan()
fun Activity.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int, vararg formatArgs:Any):Spanned= resources.getQuantityString(id, quantity,*formatArgs).toHtmlSpan()
fun Fragment.getHtmlSpannedString(@StringRes id:Int):Spanned= getString(id).toHtmlSpan()
fun Fragment.getHtmlSpannedString(@StringRes id:Int, vararg formatArgs:Any):Spanned= getString(id,*formatArgs).toHtmlSpan()
fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int):Spanned= resources.getQuantityString(id, quantity).toHtmlSpan()
fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int, vararg formatArgs:Any):Spanned= resources.getQuantityString(id, quantity,*formatArgs).toHtmlSpan()
@Himanshu Mori un extrait de code aiderait. L'utilisez-vous en classe kotlin?
svkaka le
1
Les extensions d'activité ne sont pas nécessaires, l'activité est le contexte lui
Farshad Tahmasbi
2
Strings.xml
<stringname="my_text"><Data><![CDATA[<b>Well Done !</b><br></br>All of your activities are completed.<br></br>You may now close the app.<br></br>See you again next time.]]></Data></string>
Vous devez utiliser la fonctionnalité native pour passer des paramètres. Placez simplement «% 1 $ s» au lieu de «{1}» et appelez getString (R.string.message, «5.21») sans remplacer ()
Réponses:
Vous pouvez essentiellement utiliser des balises html dans votre ressource de chaîne comme:
Et utilisez Html.fromHtml ou utilisez spannable, vérifiez le lien que j'ai publié.
Ancienne question similaire: est-il possible d'avoir plusieurs styles dans un TextView?
la source
Html.fromHtml()
: ...<![CDATA[<b><i>so</i></b>]]>
...getText(R.string.whatever)
plutôt quegetString(R.string.whatever)
name
place deid
?Html.fromHtml
ouSpannable
. Utilisez simplementgetText(R.string.whatever)
comme @andygeers mentionné.Utilisez la balise html dans les ressources de chaîne: -
Et obtenez du texte en gras à partir de ressources de chaîne comme: -
la source
Comme l'a dit David Olsson, vous pouvez utiliser du HTML dans vos ressources de chaîne:
Ensuite, si vous utilisez
getText(R.string.my_string)
plutôt quegetString(R.string.my_string)
vous récupérez unCharSequence
plutôt qu'unString
qui contient la mise en forme incorporée.la source
Dans kotlin, vous pouvez créer des fonctions d'extensions sur les ressources (activités | fragments | contexte) qui convertiront votre chaîne en une étendue html
par exemple
Usage
MODIFIER encore plus d'extensions
la source
Strings.xml
Mettre en place
la source
Vous pouvez le faire à partir d'une chaîne
et peut y accéder à partir du code java comme
la source
strings.xml
page.java
Ce prix 5.21 USD
la source