ConstraintLayout, переместить LinearLayout вверх (отрицательно) - PullRequest
0 голосов
/ 04 апреля 2019

Я перевожу некоторые проекты на AndroidX с Kotlin.У меня есть некоторые проблемы с ConstraintLayout, я уже знаю, что согласно документации:

Отрицательные поля не будут поддерживаться в ConstraintLayout.[...]

Но у меня следующая ситуация:

enter image description here

Мне нужно двигаться вверхв 5dp LinearLayout , однако мне нужно, чтобы высота продолжала соответствовать нижнему пределу экрана.То есть я поднимаюсь на 5 дп и увеличиваю высоту на 5 дп.

Как показано на рисунке, Я уже пробовал перевестиY , но он просто перемещает весь вид (а не то, что янеобходимость).Также я не могу создать представление внутри id # top с высотой 5dp и выровнять с constraintTop_toTopOf, , так как они являются частью разных групп .

Есть ли какое-либо решение для этого случая?

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

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

В этом случае основание невидимого вида может быть ограничено основанием зеленого LinearLayout с нижним полем 5dp. Красный LinearLayout может затем ограничить свою вершину до нижней части невидимого представления. Это должно дать вам 5dp перекрытия.

Попробуйте скопировать следующее в макет ограничения

            <LinearLayout
                android:id="@+id/green"
                android:layout_width="0dp"
                android:layout_height="100dp"
                android:orientation="vertical"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                android:background="@android:color/holo_green_light" />

            <View
                android:id="@+id/dummyView"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginBottom="5dp"
                android:visibility="invisible"
                app:layout_constraintBottom_toBottomOf="@id/green"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"/>

            <LinearLayout
                android:id="@+id/red"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginStart="16dp"
                android:layout_marginEnd="16dp"
                android:orientation="vertical"
                app:layout_constraintTop_toBottomOf="@id/dummyView"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                android:background="@android:color/holo_red_light" />

Обратите внимание, что измерение "0dp" означает "ограничения соответствия", если оно установлено в дочернем представлении ConstraintLayout. Это не очевидно, но фактически задокументировано здесь https://developer.android.com/reference/android/support/constraint/ConstraintLayout

0 голосов
/ 04 апреля 2019

Целью ConstraintLayout является создание иерархии плоских представлений.Поэтому, вложив LinearLayout s в поражение цели.

Я предлагаю вам избавиться от вложенных LinearLayout s и делать все, используя ограничения.

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