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

Вла*_*шер 3 android textview

您好,我可以按任何顺序将常用文本与粗体文本和图像结合起来吗? 在此输入图像描述

谢谢!

i30*_*mb1 6

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

\n
        val text = SpannableStringBuilder()\n            .append("\xd0\x92 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbc\xd0\xb5")\n            .append(" ")\n            .bold { append("\xd0\xa2\xd0\xb5\xd0\xbb\xd0\xb5\xd1\x84\xd0\xbe\xd0\xbd") }\n
Run Code Online (Sandbox Code Playgroud)\n

DrawableRes要添加图像,您可以使用像这样的手动烹饪扩展(我仅为您编写):

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

因此,第一个带有图像的字符串的最终代码将如下所示:

\n
val text = SpannableStringBuilder()\n    .append("\xd0\x92 \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbc\xd0\xb5")\n    .append(" ")\n    .bold { append("\xd0\xa2\xd0\xb5\xd0\xbb\xd0\xb5\xd1\x84\xd0\xbe\xd0\xbd") }\n    .append(" ")\n    .drawable(binding.tv, R.drawable.telephone)\n    .append(" ")\n    .append("\xd0\xbd\xd0\xb0\xd0\xb6\xd0\xbc\xd0\xb8\xd1\x82\xd0\xb5")\n    .append(" ")\n    .bold { append("\xd0\xbd\xd0\xb5\xd0\xb4\xd0\xb0\xd0\xb2\xd0\xbd\xd0\xb8\xd0\xb5") }\n    .append(" ")\n    .drawable(binding.tv, R.drawable.clock)\n\nbinding.tv.text = text\n
Run Code Online (Sandbox Code Playgroud)\n