<TextView
android:id="@+id/searchResultsExplainer"
style="?attr/textAppearanceBody1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:ellipsize="end"
android:maxLines="4"
app:layout_constraintBottom_toTopOf="@id/topBarrier"
app:layout_constraintEnd_toStartOf="@id/viewTypeToggle"
app:layout_constraintStart_toEndOf="@id/openFilters"
app:layout_constraintTop_toBottomOf="@id/searchInputLayout"
app:layout_constraintVertical_bias="0.5"
tools:text="Search results: "Dining Room""
tools:visibility="visible" />
Another thing you can try doing is ellipsizing the text manually. Something like:
val text = "Whatever really long string you are setting"
someTextView.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
someTextView.text = TextUtils.ellipsize(
text,
someTextView.paint,
someTextView.width.toFloat(),
TextUtils.TruncateAt.MIDDLE // Or END, etc
You need to do the change in an OnLayoutChangeListener because your view might not be laid out yet when you are calling this code to set the text. The TextUtils.ellipsize
method needs to know the width of the view the text is going into in order to ellipsize it properly.
Your solution was really helpful in guiding my usecase and used below code
private fun setSubTitle(text: String?) {
// set the layout with expected max width for text
contentText.isSingleLine = true
contentText.text = text
// reset the text with ellipsized text
contentText.doOnNextLayout {
if (it is TextView) {
it.text = TextUtils.ellipsize(
text,
it.paint,
it.width.toFloat(),
TextUtils.TruncateAt.END
Thanks a lot.