Abhängig davon, wie Sie Ihre Ressourcenzeichenfolge verwenden, müssen Sie möglicherweise die fett / kursiven Tags in einen CDATA-Block einfügen, damit sie erst analysiert werden, wenn sie verwendet werden von Html.fromHtml(): ... <![CDATA[<b><i>so</i></b>]]>...
dule
133
Für alle anderen, die die offizielle Android - Dokumentation etwas zu vage auf diese gefunden: Wenn Sie Tags wie <b> verwenden in Ihrem String - Ressource, stellen Sie sicher abrufen Sie es mit getText(R.string.whatever)nichtgetString(R.string.whatever)
andygeers
1
soll es nicht namestatt sein id?
Hendra Anggrian
4
Also keine Notwendigkeit für Html.fromHtmloder Spannable. Verwenden getText(R.string.whatever)Sie einfach wie @andygeers erwähnt.
Alaa M.
1
@andygeers Was können wir für eine Zeichenfolge wie "Mein Name ist <b>% s </ b>" tun, die getText nicht verwenden kann, da sie nur einen einzelnen Parameter akzeptiert?
Taylor
45
Verwenden Sie das HTML-Tag in den Zeichenfolgenressourcen: -
<resources><stringname="string_resource_name"><![CDATA[<b> Your text </b>]]> </string></resources>
Und erhalten Sie fetten Text von Zeichenfolgenressourcen wie: -
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 ist die beste Antwort und funktioniert vollständig für die Benutzer von @BindingAdapter. Danke Bruder.
Sup.Ia
43
Wie David Olsson gesagt hat, können Sie HTML in Ihren Zeichenfolgenressourcen verwenden:
<resource><stringname="my_string">A string with <i>actual</i><b>formatting</b>!</string></resources>
Wenn Sie dann getText(R.string.my_string)eher getString(R.string.my_string)eine verwenden CharSequenceals eine String, die die eingebettete Formatierung enthält, erhalten Sie diese zurück .
getText gibt CharSequence nicht ein Spannable zurück
Tigran Babajanyan
1
Was ist, wenn Ihre Zeichenfolge eine Menge ist, zu der Sie eine Zahl hinzufügen müssen?
Taylor
Mit getText können Sie keine Platzhalter verwenden
Vincent_Paing
10
In kotlin können Sie Erweiterungsfunktionen für Ressourcen (Aktivitäten | Fragmente | Kontext) erstellen, die Ihre Zeichenfolge in einen HTML-Bereich konvertieren
z.B
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)}
Verwendung
//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")
BEARBEITEN Sie noch mehr Erweiterungen
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 ein Ausschnitt würde helfen. Verwenden Sie es in der Kotlin-Klasse?
Svkaka
1
Aktivitätserweiterungen sind nicht erforderlich. Aktivität ist Kontext selbst
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>
Sie sollten native Funktionen zum Übergeben von Parametern verwenden. Platzieren Sie einfach "% 1 $ s" anstelle von "{1}" und rufen Sie getString (R.string.message, "5.21") ohne replace () auf
Antworten:
Grundsätzlich können Sie HTML-Tags in Ihrer Zeichenfolgenressource verwenden, z.
Und verwenden Sie Html.fromHtml oder verwenden Sie spannable. Überprüfen Sie den Link, den ich gepostet habe.
Alte ähnliche Frage: Ist es möglich, mehrere Stile in einer Textansicht zu haben?
quelle
Html.fromHtml()
: ...<![CDATA[<b><i>so</i></b>]]>
...getText(R.string.whatever)
nichtgetString(R.string.whatever)
name
statt seinid
?Html.fromHtml
oderSpannable
. VerwendengetText(R.string.whatever)
Sie einfach wie @andygeers erwähnt.Verwenden Sie das HTML-Tag in den Zeichenfolgenressourcen: -
Und erhalten Sie fetten Text von Zeichenfolgenressourcen wie: -
quelle
Wie David Olsson gesagt hat, können Sie HTML in Ihren Zeichenfolgenressourcen verwenden:
Wenn Sie dann
getText(R.string.my_string)
ehergetString(R.string.my_string)
eine verwendenCharSequence
als eineString
, die die eingebettete Formatierung enthält, erhalten Sie diese zurück .quelle
In kotlin können Sie Erweiterungsfunktionen für Ressourcen (Aktivitäten | Fragmente | Kontext) erstellen, die Ihre Zeichenfolge in einen HTML-Bereich konvertieren
z.B
Verwendung
BEARBEITEN Sie noch mehr Erweiterungen
quelle
Strings.xml
Einstellen
quelle
Sie können es von Zeichenfolge tun
und kann über den Java-Code wie darauf zugreifen
quelle
string.xml
page.java
Dieser Preis 5,21 USD
quelle