Además, dependiendo de cómo use su cadena de recursos, es posible que deba colocar las etiquetas en negrita / cursiva en un bloque CDATA para que no se analicen hasta que las use Html.fromHtml(): ... <![CDATA[<b><i>so</i></b>]]>...
dule
133
Para cualquier otra persona que haya encontrado la documentación oficial de Android un poco vaga en esto: si usa etiquetas como <b> en su recurso de cadena, asegúrese de recuperarlo usando en getText(R.string.whatever)lugar degetString(R.string.whatever)
andygeers
1
¿No se supone que sea en namelugar de id?
Hendra Anggrian
4
Entonces no hay necesidad de Html.fromHtmlo Spannable. Solo usa getText(R.string.whatever)como @andygeers mencionado.
Alaa M.
1
@andygeers ¿Qué podemos hacer con una cadena como "Mi nombre es <b>% s </b>" que no puede usar getText ya que solo acepta un único parámetro?
Taylor
45
Use la etiqueta html dentro de los recursos de cadena: -
<resources><stringname="string_resource_name"><![CDATA[<b> Your text </b>]]> </string></resources>
Y obtenga texto en negrita de recursos de cadena 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));
es la mejor respuesta y funciona totalmente para las personas que usan @BindingAdapter. Gracias hermano.
Sup.Ia
44
Como ha dicho David Olsson, puede usar HTML en sus recursos de cadena:
<resource><stringname="my_string">A string with <i>actual</i><b>formatting</b>!</string></resources>
Luego, si usa en getText(R.string.my_string)lugar de getString(R.string.my_string), obtiene un en CharSequencelugar de un Stringque contiene el formato incrustado.
¿Qué pasa si su cadena es una cantidad a la que necesita agregar un número?
Taylor
getText no le permite usar marcadores de posición
Vincent_Paing
10
En kotlin, puede crear funciones de extensiones en recursos (actividades | fragmentos | contexto) que convertirán su cadena en un intervalo html
p.ej
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")
EDITA aún más extensiones
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 algún fragmento ayudaría. ¿Lo estás usando en la clase de kotlin?
svkaka
1
Las extensiones de actividad no son necesarias, la actividad es el contexto en sí mismo
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>
Debe utilizar la funcionalidad nativa para pasar parámetros. Simplemente coloque "% 1 $ s" en lugar de "{1}" y llame a getString (R.string.message, "5.21") sin reemplazar ()
Respuestas:
Básicamente, podría usar etiquetas html en su recurso de cadena como:
Y use Html.fromHtml o use spannable, verifique el enlace que publiqué.
Antigua pregunta similar: ¿es posible tener varios estilos dentro de un TextView?
fuente
Html.fromHtml()
: ...<![CDATA[<b><i>so</i></b>]]>
...getText(R.string.whatever)
lugar degetString(R.string.whatever)
name
lugar deid
?Html.fromHtml
oSpannable
. Solo usagetText(R.string.whatever)
como @andygeers mencionado.Use la etiqueta html dentro de los recursos de cadena: -
Y obtenga texto en negrita de recursos de cadena como: -
fuente
Como ha dicho David Olsson, puede usar HTML en sus recursos de cadena:
Luego, si usa en
getText(R.string.my_string)
lugar degetString(R.string.my_string)
, obtiene un enCharSequence
lugar de unString
que contiene el formato incrustado.fuente
En kotlin, puede crear funciones de extensiones en recursos (actividades | fragmentos | contexto) que convertirán su cadena en un intervalo html
p.ej
Uso
EDITA aún más extensiones
fuente
Strings.xml
Para configurar
fuente
Puedes hacerlo desde cuerda
y puede acceder a él desde el código java como
fuente
strings.xml
page.java
Este precio 5.21 USD
fuente