Adam
Adam

Reputation: 41

Android - Textview in ConstraintLayout not resizing properly to fit its contents because of parent's padding

I'm trying to do a pretty basic thing: I have a ConstraintLayout with a TextView inside and I want the TextView to resize according to its contents. However, right now the TextView overflows and is not fully displayed. The culprit is the ConstraintLayout's padding. Any ideas how to fix it while keeping the padding? (I have more elements inside the ConstraintLayout, so I don't wanna put a margin on each one of them instead of the parent's padding)

Image (from Android Studio's layout editor, but the result is the same during runtime):

enter image description here

Code:

<android.support.constraint.ConstraintLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/msg_in_bg"
    android:padding="10dp"
    android:maxWidth="240dp">

    <TextView
        android:id="@+id/txtMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/messageTxt"
        android:text="@{item.text}"
        tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel ex nec massa tincidunt dapibus eget quis nulla. Sed tristique justo sed vehicula congue. Nullam varius lacinia sagittis. Sed consectetur sit amet erat fringilla vehicula. Donec dapibus elit eu mauris congue, a dapibus mi laoreet. "
        app:layout_constrainedWidth="true"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

</android.support.constraint.ConstraintLayout>

Upvotes: 3

Views: 838

Answers (1)

Ben P.
Ben P.

Reputation: 54234

Move the android:maxWidth attribute from the parent ConstraintLayout into the TextView. You'll also want to adjust it to consider the padding (i.e. change it to 220dp instead of 240dp since you'll have 20dp of horizontal padding).

After doing that, there's no need for the app:layout_constrainedWidth attribute.

<android.support.constraint.ConstraintLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:background="@drawable/msg_in_bg">

    <TextView
        android:id="@+id/txtMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/messageTxt"
        android:text="@{item.text}"
        android:maxWidth="220dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel ex nec massa tincidunt dapibus eget quis nulla. Sed tristique justo sed vehicula congue. Nullam varius lacinia sagittis. Sed consectetur sit amet erat fringilla vehicula. Donec dapibus elit eu mauris congue, a dapibus mi laoreet. "/>

</android.support.constraint.ConstraintLayout>

Upvotes: 1

Related Questions