Für den Fall, dass Sie zu viel Verwirrung für Ihre Übersetzer vermeiden möchten, habe ich mir eine Möglichkeit ausgedacht, nur einen Platzhalter in den Zeichenfolgen zu haben, der im Code behandelt wird.
Angenommen, Sie haben dies in den Saiten:
<string name="test">
<![CDATA[
We found %1$s items]]>
</string>
Wenn Sie möchten, dass der Platzhaltertext eine andere Größe und Farbe hat, können Sie Folgendes verwenden:
val textToPutAsPlaceHolder = "123"
val formattedStr = getString(R.string.test, "$textToPutAsPlaceHolder<bc/>")
val placeHolderTextSize = resources.getDimensionPixelSize(R.dimen.some_text_size)
val placeHolderTextColor = ContextCompat.getColor(this, R.color.design_default_color_primary_dark)
val textToShow = HtmlCompat.fromHtml(formattedStr, HtmlCompat.FROM_HTML_MODE_LEGACY, null, object : Html.TagHandler {
var start = 0
override fun handleTag(opening: Boolean, tag: String, output: Editable, xmlReader: XMLReader) {
when (tag) {
"bc" -> if (!opening) start = output.length - textToPutAsPlaceHolder.length
"html" -> if (!opening) {
output.setSpan(AbsoluteSizeSpan(placeHolderTextSize), start, start + textToPutAsPlaceHolder.length, 0)
output.setSpan(ForegroundColorSpan(placeHolderTextColor), start, start + textToPutAsPlaceHolder.length, 0)
}
}
}
})
textView.text = textToShow
Und das Ergebnis: