Можно ли рисовать макеты с помощью constraintDimensionRatio и height / width match_parent, ограничивая при этом верх и низ макета одной точкой - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь нарисовать два вида, один из которых будет перекрывать другой, используя компоновки ограничений и, constraint_guidelines и app:layout_constraintDimensionRatio="h, 1:1" для их определения размера (это потому, что я буду использовать собственные представления, которым нужно знать ихсобственный размер при рисовании)

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

Вот как я бы хотел, чтобы они выложились;

Обратите внимание, был сделан снимок экрана вышес меньшим размером imageView, помещенным вручную

. Таким образом, они размещают макеты как со вторыми размерами изображений, равными match_parent, так и с установленным соотношением

Это то же самое, нос высотой / шириной меньшего представления изображения, установленного на 120dp, а не match_parent

Если бы мне пришлось угадывать, я бы сказал, что проблема в том, что я одновременно пытаюсьВысота atch с ограничением, которое приведет к высоте 0dp, и при этом даст ему коэффициент, который гарантирует, что его высота соответствует ширине между направляющими.

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

<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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.constraintlayout.widget.Guideline
    android:id="@+id/example_guideline_left_one"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.3"
    app:layout_constraintStart_toStartOf="parent" />

<androidx.constraintlayout.widget.Guideline
    android:id="@+id/onboarding_role_guideline_right_one"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.7"
    app:layout_constraintStart_toStartOf="parent" />

<ImageView
    android:id="@+id/example_image_one"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@color/colorPrimaryDark"
    app:layout_constraintDimensionRatio="h, 1:1"
    app:layout_constraintEnd_toStartOf="@+id/onboarding_role_guideline_right_one"
    app:layout_constraintHorizontal_bias="1.0"
    app:layout_constraintStart_toStartOf="@+id/example_guideline_left_one"
    app:layout_constraintTop_toTopOf="parent" />

<androidx.constraintlayout.widget.Guideline
    android:id="@+id/example_guideline_left_two"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.55"
    app:layout_constraintStart_toStartOf="parent" />

<androidx.constraintlayout.widget.Guideline
    android:id="@+id/onboarding_role_guideline_right_two"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.85"
    app:layout_constraintStart_toStartOf="parent" />

<ImageView
    android:id="@+id/example_image_two"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintDimensionRatio="h, 1:1"
    app:layout_constraintBottom_toBottomOf="@+id/example_image_one"
    app:layout_constraintEnd_toStartOf="@+id/onboarding_role_guideline_right_two"
    app:layout_constraintHorizontal_bias="1.0"
    app:layout_constraintStart_toStartOf="@+id/example_guideline_left_two"
    app:layout_constraintTop_toBottomOf="@+id/example_image_one" />

1 Ответ

0 голосов
/ 11 декабря 2018

Реализовано невероятно простое решение, думаю, что это вопрос слишком увязнуть в специфических ограничениях и невозможности увидеть лес за деревьями.

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

...