Search code examples
androidxmlandroid-studioandroid-layoutandroid-constraintlayout

Constraint layout constraint dimension ratio not working with multiple views


I am having issue with constraint dimension ratio. Width and height of image view is not adjusting. I want to make image thumb view square depending on the ratio. I want the width and height of image thumb equal to total height of three text views given in the layout. Also current code is not loading image into image view.

Image of Layout

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/constraintAList"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp">

    <com.google.android.material.imageview.ShapeableImageView
        android:id="@+id/audioThumb"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_headset"
        android:scaleType="centerCrop"
        app:layout_constraintDimensionRatio="1:1"
        app:layout_constraintBottom_toBottomOf="@id/audioDetail"
        app:layout_constraintEnd_toStartOf="@id/audioName"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/audioName"
        app:shapeAppearanceOverlay="@style/roundImageView" />     

    <TextView
        android:id="@+id/audioName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:includeFontPadding="false"
        android:maxLines="2"
        android:lines="2"
        android:padding="0dp"
        android:text="audioName"
        app:layout_constraintBottom_toTopOf="@+id/audioTime"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/audioThumb"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_chainStyle="packed" />

    <TextView
        android:id="@+id/audioTime"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:gravity="top|start"
        android:includeFontPadding="false"
        android:padding="0dp"
        android:singleLine="true"
        android:text="audioDate"
        android:textAlignment="textStart"
        app:layout_constraintBottom_toTopOf="@id/audioDetail"
        app:layout_constraintEnd_toEndOf="@id/audioName"
        app:layout_constraintStart_toStartOf="@id/audioName"
        app:layout_constraintTop_toBottomOf="@+id/audioName" />

    <TextView
        android:id="@+id/audioDetail"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:gravity="top|start"
        android:includeFontPadding="false"
        android:padding="0dp"
        android:singleLine="true"
        android:text="audioDuration"
        android:textAlignment="textStart"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@id/audioTime"
        app:layout_constraintStart_toStartOf="@id/audioTime"
        app:layout_constraintTop_toBottomOf="@+id/audioTime" />

</androidx.constraintlayout.widget.ConstraintLayout>

Solution

  • For the ImageView

    • set android:layout_height="0dp" and
    • remove app:layout_constraintEnd_toStartOf="@id/audioName"