如何在ConstraintLayout内的文本视图中将视图绑定到多行文本的末尾?

问题描述 投票:1回答:2

我乍看之下有一个简单的任务,但现在我有些困惑。我需要在TextView内部的最后一行文本之后添加ImageView,如下所示:

enter image description here

但是问题是,如果我为ImageView添加layout_constraintStart_toEndOf =“ description_text”,我会看到:

enter image description here

我的布局现在是:

<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内的文本结尾之后添加视图,而不管该文本结尾在哪里。因为文本是动态的并且可以更改。

android android-constraintlayout
2个回答
1
投票

您可以使用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

enter image description here

然而,完成所有这些操作的另一种方法是使用HTML标记(请参阅HtmlCompat,特别是“ ”和“ ”。您必须为 HtmlCompat提供图像获取器。] >


0
投票

严格来说,这不是直接解决您的问题,但是根据您的目的,您可以通过添加此Unicode符号https://www.fileformat.info/info/unicode/char/1f6c8/index.htm来解决此问题>

© www.soinside.com 2019 - 2024. All rights reserved.