我乍看之下有一个简单的任务,但现在我有些困惑。我需要在TextView内部的最后一行文本之后添加ImageView,如下所示:
但是问题是,如果我为ImageView添加layout_constraintStart_toEndOf =“ description_text”,我会看到:
我的布局现在是:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/description_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="26dp"
android:paddingBottom="8dp"
app:layout_constraintEnd_toStartOf="@id/img_info_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="It's a text to fill the TextView with multiline text and see how it works if I need to bind another view after this text" />
<ImageView
android:id="@+id/info_image"
android:layout_width="24dp"
android:layout_height="24dp"
app:layout_constraintBottom_toBottomOf="@id/description"
app:layout_constraintStart_toEndOf="@id/real_rewards_description_text"
app:srcCompat="@drawable/ic_info" />
</androidx.constraintlayout.widget.ConstraintLayout>
因此,可以在TextView内的文本结尾之后添加视图,而不管该文本结尾在哪里。因为文本是动态的并且可以更改。
您可以使用ImageSpan:
跨度用Drawable替换它所附加的文本,该Drawable可以与底部或周围文本的基线对齐。
可绘制对象的对齐方式将与文本的基线或文本的底部对齐。如果您要按照问题所示向下移动ImageSpan,则在应用跨度之前,您将需要覆盖onDraw()
函数或进行其他一些操作。
更新:将图像下移的另一种方法是将其包裹在SubScriptSpan中,如下所示:
val image = resources.getDrawable(R.drawable.ic_info)
val lineHeight = textView.lineHeight
image.updateBounds(bottom = lineHeight, right = lineHeight)
val imageSpan = ImageSpan(image)
val spannable = SpannableString("${textView.text} ")
spannable.setSpan(
imageSpan, spannable.length - 1, spannable.length, Spannable.SPAN_INCLUSIVE_INCLUSIVE
)
spannable.setSpan(SubscriptSpan(),spannable.length - 1, spannable.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
textView.text = spannable
然而,完成所有这些操作的另一种方法是使用HTML标记(请参阅HtmlCompat,特别是“ ”和“
严格来说,这不是直接解决您的问题,但是根据您的目的,您可以通过添加此Unicode符号https://www.fileformat.info/info/unicode/char/1f6c8/index.htm来解决此问题>