ในกรณีที่คุณต้องการหลีกเลี่ยงความสับสนมากเกินไปสำหรับนักแปลของคุณฉันมีวิธีที่จะมีตัวยึดตำแหน่งในสตริงซึ่งจะถูกจัดการในโค้ด
ดังนั้นคุณควรมีสิ่งนี้ในสตริง:
<string name="test">
<![CDATA[
We found %1$s items]]>
</string>
และคุณต้องการให้ข้อความตัวยึดมีขนาดและสีแตกต่างกันคุณสามารถใช้สิ่งนี้:
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
และผลลัพธ์: