ConstraintLayout установить ограничения приоритетов? - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь реализовать следующий макет в Android, используя ConstraintLayout.

My layout

Однако два имени пользователя TextViews необходиморасширять, пока они не достигнут максимальной ширины, которая зависит от экрана каждого телефона.

Первое имя пользователя должно быть видимым, насколько это возможно, оно должно иметь поле 8dp, а затем «стрелка ответа», которая имеет фиксированныйwidth, а затем, если оно подходит, столько «ответа на имя пользователя» TextView должно быть видно.Точечный разделитель, дата и лайки TexViews должны быть видны, в wrap_content.

. В iOS нам удалось реализовать такую ​​компоновку с использованием приоритетов объятия контента и устойчивости к сжатию контента.Есть ли в Android аналогичные функции?

Вот мой макет XML для справки:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/newspaperLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

<View
    android:id="@+id/commentDepthView"
    android:layout_width="2dp"
    android:layout_height="0dp"
    android:layout_marginStart="@dimen/default_margin"
    android:background="@color/blueDark"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    />

<TextView
    android:id="@+id/commentAuthorTextView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/default_margin"
    android:layout_marginTop="@dimen/default_margin"
    android:ellipsize="end"
    android:lines="1"
    android:textColor="@color/blue"
    android:textStyle="bold"
    app:layout_constraintBottom_toTopOf="@id/commentTextView"
    app:layout_constraintEnd_toStartOf="@id/replyToArrowImageView"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toEndOf="@+id/commentDepthView"
    app:layout_constraintTop_toTopOf="parent"
    tools:text="Username"/>

<ImageView
    android:id="@+id/replyToArrowImageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/default_margin"
    android:layout_marginEnd="8dp"
    android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="@id/commentAuthorTextView"
    app:layout_constraintEnd_toStartOf="@id/commentReplyToTextView"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/commentAuthorTextView"
    app:layout_constraintTop_toTopOf="@id/commentAuthorTextView"
    app:srcCompat="@drawable/reply_to_arrow"/>

<TextView
    android:id="@+id/commentReplyToTextView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/default_margin"
    android:ellipsize="end"
    android:lines="1"
    android:textColor="@color/blue"
    android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="@+id/commentAuthorTextView"
    app:layout_constraintEnd_toStartOf="@+id/dotSeparatorTextView"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toEndOf="@id/replyToArrowImageView"
    app:layout_constraintTop_toTopOf="@id/commentAuthorTextView"
    tools:text="Reply To Username"
    />

<TextView
    android:id="@+id/dotSeparatorTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/default_margin"
    android:layout_marginEnd="8dp"
    android:text="@string/dot_separator"
    android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="@id/commentAuthorTextView"
    app:layout_constraintEnd_toStartOf="@+id/commentDateTextView"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/commentReplyToTextView"
    app:layout_constraintTop_toTopOf="@id/commentAuthorTextView"/>

<TextView
    android:id="@+id/commentDateTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/default_margin"
    android:layout_marginEnd="@dimen/default_margin"
    app:layout_constraintBottom_toBottomOf="@+id/commentAuthorTextView"
    app:layout_constraintEnd_toStartOf="@id/commentLikesTextView"
    app:layout_constraintStart_toEndOf="@id/dotSeparatorTextView"
    app:layout_constraintTop_toTopOf="@+id/commentAuthorTextView"
    tools:text="1/1/1970"/>

<TextView
    android:id="@+id/commentLikesTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/default_margin"
    android:layout_marginEnd="@dimen/default_margin"
    app:layout_constraintBottom_toBottomOf="@+id/commentAuthorTextView"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@id/commentDateTextView"
    app:layout_constraintTop_toTopOf="@+id/commentAuthorTextView"
    tools:text="0 Likes"/>


<TextView
    android:id="@+id/commentTextView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/default_margin"
    android:layout_marginTop="@dimen/default_margin"
    android:layout_marginEnd="@dimen/default_margin"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@id/commentDepthView"
    app:layout_constraintTop_toBottomOf="@+id/commentAuthorTextView"
    tools:text="This is test comment that is really relly long. Well not that long, but it's long enough, don't you think?"/>

<View
    android:id="@+id/separatorView"
    android:layout_width="0dp"
    android:layout_height="0.5dp"
    android:layout_marginStart="@dimen/default_margin"
    android:layout_marginTop="@dimen/default_margin"
    android:layout_marginEnd="@dimen/default_margin"
    android:background="@color/grey"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@id/commentDepthView"
    app:layout_constraintTop_toBottomOf="@+id/commentTextView"/>

</androidx.constraintlayout.widget.ConstraintLayout>

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

1 Ответ

1 голос
/ 02 июля 2019

Дайте первое имя пользователя

android:layout_width="0dp" 
app:layout_constraintHorizontal_bias="0"
app:layout_constraintWidth_default="wrap"

и второму андроиду: layout_width = "0dp"

Остальное - wrap_content и объедините их в цепочку

...