Android:如何在一个TextView中组合文本和图标

3

你好,我能否像这样以任意顺序结合普通文本、粗体文本和图片呢? enter image description here

谢谢!

1个回答

5
这可以通过使用SpannableStringBuilder来实现。要添加加粗文本,可以这样做:
        val text = SpannableStringBuilder()
            .append("В программе")
            .append(" ")
            .bold { append("Телефон") }

要添加图片,您可以使用手工扩展程序,像这样(我只为您编写了DrawableRes):

    fun SpannableStringBuilder.drawable(
        tv: TextView,
        @DrawableRes drawable: Int,
    ): SpannableStringBuilder {
        val icon = ContextCompat.getDrawable(tv.context, drawable)!!
        icon.setBounds(0, 0, tv.lineHeight, tv.lineHeight)
        return inSpans(ImageSpan(icon, DynamicDrawableSpan.ALIGN_BOTTOM)) { append("$drawable") }
    }

因此,带有图像的第一个字符串的最终代码将如下所示:
val text = SpannableStringBuilder()
    .append("В программе")
    .append(" ")
    .bold { append("Телефон") }
    .append(" ")
    .drawable(binding.tv, R.drawable.telephone)
    .append(" ")
    .append("нажмите")
    .append(" ")
    .bold { append("недавние") }
    .append(" ")
    .drawable(binding.tv, R.drawable.clock)

binding.tv.text = text

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接