Заполните оставшееся пространство видом, который имеет соотношение сторон в ConstraintLayout - PullRequest
3 голосов
/ 24 апреля 2019

У меня есть два вида (viewA, viewB) в вертикальной цепочке. соотношение сторон viewA всегда должно быть 1: 1, а высота viewB является динамической (может быть 400dp, может быть 700dp)

Ожидаемые результаты: Ширина viewA должна быть уменьшена (с сохранением соотношения сторон), когда высота viewB слишком велика для размещения двух видов на экране.

Фактический результат: Ширина viewA всегда совпадает с родительским, и представления выходят за границы экрана, если высота viewB слишком велика.

ПРИМЕЧАНИЕ. Желательно использовать ConstantsLayout и не иметь вложенных групп просмотра.

<View
    android:id="@+id/viewA"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toTopOf="@+id/viewB"
    app:layout_constraintDimensionRatio="h,1:1"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_chainStyle="spread"/>

<View
    android:id="@+id/viewB"
    android:layout_width="match_parent"
    android:layout_height="700dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/viewA"/>

1 Ответ

3 голосов
/ 24 апреля 2019

Измените размерное соотношение вида сверху на следующее:

app:layout_constraintDimensionRatio="w,1:1"

Теперь, когда высота нижнего вида изменяется, верх будет отслеживать, как вы хотите, сохраняя соотношение 1: 1.Я добавил цвет, чтобы лучше видеть виды в макете.

Вид снизу при 700dp

enter image description here

Вид снизу при 500dp

enter image description here

Вид снизу при 200dp

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...