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
您好,我可以将普通文本与粗体文本和图像这样以任意顺序组合在一起吗?
谢谢!
一种方法是使用 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