Android: 如何将文本和图标合并到一个 TextView 中

Android: How to combine text and icons in one TextView

您好,我可以将普通文本与粗体文本和图像这样以任意顺序组合在一起吗?

谢谢!

一种方法是使用 SpannableStringBuilder。要添加粗体文本,您可以这样做:

        val text = SpannableStringBuilder()
            .append("В программе")
            .append(" ")
            .bold { append("Телефон") }

要添加图像,您可以像这样使用 hand cook 扩展程序(我只为 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