Двухстрочный ConstraintLayout

#android #android-constraintlayout

#Android #android-constraintlayout

Вопрос:

Я пытаюсь создать двухстрочный ConstraintLayout , каждая строка имеет два представления. Проблема с тем, что у меня есть сейчас, заключается в том, что левые виды перекрывают правые виды, как вы можете видеть на скриншоте:

введите описание изображения здесь

Это код, который я использую:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:padding="5dp"
    android:orientation="horizontal">

    <TextView
        android:id="@ id/title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <ImageView
        android:id="@ id/download"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:paddingStart="5dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        />

    <TextView
        android:id="@ id/date"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="13sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@ id/title"
        android:layout_marginTop="4dp"
        />

    <TextView
        android:id="@ id/duration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="13sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@ id/title"
        android:layout_marginTop="4dp"
        />

</androidx.constraintlayout.widget.ConstraintLayout>
  

Я бы хотел, чтобы просмотры слева (заголовок, дата) заканчивались там, где начинаются загрузка изображения и продолжительность. Я не так много работал с ConstraintLayouts , так что это может быть что-то простое.

Ответ №1:

Существует множество различных способов добиться этого, одним из способов было бы поместить ваш текст в изображение и придать им одинаковую высоту.

Они не будут перекрывать друг друга, если вы сделаете что-то подобное :

В вашем примере вы использовали android:layout_width="match_parent" для текста, чтобы он был расширен на всю строку и перекрывал другое ваше представление.
Вы должны использовать android:layout_width="0dp" (это match_constraint есть), чтобы ваши представления не перекрывали друг друга.

Вот пример макета, который выглядит как строка, которую вы хотите создать:

  <androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@ id/textView4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="loot at this text that wont everlap the image"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@ id/imageView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@ id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintBottom_toBottomOf="@ id/textView4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@ id/textView4"
        tools:src="@tools:sample/avatars[1]" />
</androidx.constraintlayout.widget.ConstraintLayout>
  

Комментарии:

1. Это идеально. Спасибо!