Além disso, dependendo de como você usa sua string de recurso, pode ser necessário colocar as tags em negrito / itálico em um bloco CDATA para que não sejam analisadas até que sejam usadas por Html.fromHtml(): ... <![CDATA[<b><i>so</i></b>]]>...
dule
133
Para qualquer outra pessoa que achou a documentação oficial do Android um pouco vaga sobre isso: se você usar tags como <b> em seu recurso de string, certifique-se de recuperá-lo usando em getText(R.string.whatever)vez degetString(R.string.whatever)
andygeers
1
não deveria ser em namevez de id?
Hendra Anggrian
4
Portanto, não há necessidade de Html.fromHtmlou Spannable. Apenas use getText(R.string.whatever)como @andygeers mencionado.
Alaa M.
1
@andygeers O que podemos fazer para uma string como "Meu nome é <b>% s </b>", que não pode usar getText porque aceita apenas um único parâmetro?
Taylor
45
Use a tag html dentro de recursos de string: -
<resources><stringname="string_resource_name"><![CDATA[<b> Your text </b>]]> </string></resources>
E obter texto em negrito de recursos de string como: -
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));
é a melhor resposta e funciona totalmente para as pessoas que usam @BindingAdapter. Obrigado, irmão.
Sup.Ia
44
Como David Olsson disse, você pode usar HTML em seus recursos de string:
<resource><stringname="my_string">A string with <i>actual</i><b>formatting</b>!</string></resources>
Então, se você usar em getText(R.string.my_string)vez de getString(R.string.my_string)obter de volta um em CharSequencevez de um Stringque contém a formatação incorporada.
E se a sua string for uma quantidade à qual você precisa adicionar um número?
Taylor
getText não permite que você use espaços reservados
Vincent_Paing
11
No kotlin, você pode criar funções de extensão em recursos (atividades | fragmentos | contexto) que converterão sua string em uma extensão html
por exemplo
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)}
Uso
//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")
EDITAR ainda mais extensões
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, algum trecho ajudaria. Você está usando na aula de kotlin?
svkaka
1
As extensões de atividades não são necessárias, a atividade é o próprio contexto
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>
Você deve usar a funcionalidade nativa para passar parâmetros. Basta colocar "% 1 $ s" em vez de "{1}" e chamar getString (R.string.message, "5.21") sem replace ()
Respostas:
Você poderia basicamente usar tags html em seu recurso de string, como:
E use Html.fromHtml ou use spannable, verifique o link que postei.
Antiga pergunta semelhante: É possível ter vários estilos dentro de um TextView?
fonte
Html.fromHtml()
: ...<![CDATA[<b><i>so</i></b>]]>
...getText(R.string.whatever)
vez degetString(R.string.whatever)
name
vez deid
?Html.fromHtml
ouSpannable
. Apenas usegetText(R.string.whatever)
como @andygeers mencionado.Use a tag html dentro de recursos de string: -
E obter texto em negrito de recursos de string como: -
fonte
Como David Olsson disse, você pode usar HTML em seus recursos de string:
Então, se você usar em
getText(R.string.my_string)
vez degetString(R.string.my_string)
obter de volta um emCharSequence
vez de umString
que contém a formatação incorporada.fonte
No kotlin, você pode criar funções de extensão em recursos (atividades | fragmentos | contexto) que converterão sua string em uma extensão html
por exemplo
Uso
EDITAR ainda mais extensões
fonte
Strings.xml
Pôr
fonte
Você pode fazer isso com barbante
e pode acessá-lo a partir do código java como
fonte
strings.xml
page.java
Este preço 5,21 USD
fonte