Jika Anda ingin menghindari terlalu banyak kebingungan untuk penerjemah Anda, saya telah menemukan cara untuk memiliki placeholder dalam string, yang akan ditangani dalam kode.
Jadi, seandainya Anda memiliki ini di string:
<string name="test">
<![CDATA[
We found %1$s items]]>
</string>
Dan Anda ingin teks pengganti memiliki ukuran dan warna yang berbeda, Anda dapat menggunakan ini:
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
Dan hasilnya: