提问人:Shivam Gupta 提问时间:8/30/2023 更新时间:8/31/2023 访问量:37
如何在多行文本视图的最后一个字符之后放置图标
How to place an icon just after the last character of a multiline textview
问:
我想在(可能)多行 TextView 的最后一个字之后找到一个视图。
例如,TextView 可能是两行,第二行的长度约为 TextView 宽度的一半。如何在最后一个单词之后找到视图。
我还想在该图标上附加一个单击侦听器。我正在使用数据绑定。
我试过spannabale琴弦。
答:
0赞
Blate
8/30/2023
#1
试试这个:
val targetText = "A quick brown fox jumps over \n the lazy dog"
val text: SpannableStringBuilder = SpannableStringBuilder(targetText)
val drawable: Drawable = ContextCompat.getDrawable(this, R.mipmap.ic_launcher)!!
drawable.setBounds(0, 0, 50, 50)
//ImageSpan.ALIGN_BASELINE; ImageSpan.ALIGN_BOTTOM; ImageSpan.ALIGN_CENTER;
val imageSpan: ImageSpan = ImageSpan(drawable, ImageSpan.ALIGN_BASELINE)
val clickSpan: ClickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
Toast.makeText(this@TestActivity, "click icon", Toast.LENGTH_SHORT).show()
}
}
val len: Int = text.length
text.append("\uFFFC")
text.setSpan(imageSpan, len, text.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
text.setSpan(clickSpan, len, text.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
mViewBinding.tv.highlightColor = ContextCompat.getColor(this, android.R.color.transparent)
mViewBinding.tv.movementMethod = LinkMovementMethod.getInstance()
mViewBinding.tv.text = text
mViewBinding.tv.setOnClickListener {
Toast.makeText(this@TestActivity, "click text", Toast.LENGTH_SHORT).show()
}
然后你可以得到:图片
这是你的愿望吗?
评论
0赞
Shivam Gupta
8/31/2023
#2
我实现了这个功能。
看一看
@BindingAdapter("yourTAG")
fun setText(textView: TextView, text: SpannableString?) {
textView.movementMethod = LinkMovementMethod.getInstance()
if (!text.isNullOrBlank()) {
textView.text = text
}
然后在 viewModel 中创建此函数
private fun getSpannable(text:CharSequence): SpannableString{
val icon: Drawable = resourcesService.getDrawable(R.drawable.your_icon)
val spannableString = SpannableString(text)
val position = spannableString.length-1
icon.setBounds(0, 0, icon.intrinsicWidth, icon.intrinsicHeight)
val imageSpan = ImageSpan(icon, ImageSpan.ALIGN_BASELINE)
spannableString.setSpan(imageSpan, position, position +1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
//TODO
}
}
spannableString.setSpan(clickableSpan, position, position + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
return spannableString
}
var myField = getSpannable("Thank you Stackoverflow")
在您的视野中
app:yourTAG="@{vm.myField}"
}
评论