如何解决Android 在 TextView 的文本中使用图标
我想在 TextView 的文本中使用图标。 (不在前面或后面。)基本思想是一个简短的信息框,告诉用户,上面这些花哨的三行是菜单。 (因为不可能在它们下面写“菜单”,除非我也想自己处理所有的点击事件。sigh) 所以我的文字应该是这样的:
现在这只是在 textview 末尾添加的一个图标,但是正如您清楚地看到的那样,它看起来非常丑陋,并且只能在固定的屏幕尺寸下使用。在横向模式下,图标将完全位于屏幕的另一侧,而不是文本。 因此,我正在寻找某种方式在文本中写入图标。 我正在考虑字符串资源或类似内容中的“Um das Menü zu öffnen,tippe auf @drawable/sandwich”之类的东西。 (很遗憾,这显然不能那样工作。)
这可能吗?或者,如果没有,是否有一些秘密技巧可以在不创建自定义布局的情况下向顶部操作栏中的三明治图标添加文本? 我的大约 50% 的用户在意识到它是一个菜单时遇到问题,因为他们不习惯很多应用。
解决方法
是的,您可以使用 SpannableString 来实现。请参阅以下示例:
val modifiedText = "your-text-here %icon%" // you can use resource string here
val span = SpannableString(modifiedText)
val drawable = ResourcesCompat.getDrawable(resources,R.drawable.your_image,null)
drawable?.setBounds(0,drawable.intrinsicWidth,drawable.intrinsicHeight)
val image = ImageSpan(drawable,ImageSpan.BOTTOM)
val startIndex = modifiedText.indexOf("%icon%")
//Replace %icon% with drawable
span.setSpan(image,startIndex,startIndex + 6,Spannable.SPAN_INCLUSIVE_INCLUSIVE)
yourTextView.setText(span)
,
您可以使用 VerticalImageSpan
,它是 ImageSpan
的扩展。
并使用以下 TextView
扩展函数接收 TextView
中要放置 drawable 的索引;一个可绘制的,所需的图像宽度和高度。
fun TextView.addDrawableAt(index: Int,@DrawableRes imgSrc: Int,imgWidth: Int,imgHeight: Int) {
val ssb = SpannableStringBuilder(this.text)
val drawable = ContextCompat.getDrawable(this.context,imgSrc) ?: return
drawable.mutate()
drawable.setBounds(
0,imgWidth,imgHeight
)
ssb.setSpan(
VerticalImageSpan(drawable),index - 1,index,Spannable.SPAN_INCLUSIVE_EXCLUSIVE
)
this.setText(ssb,TextView.BufferType.SPANNABLE)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。