Установите ширину, чтобы соответствовать ограничениям в ConstraintLayout


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

есть ли что-то эквивалентное match_constraints (в отличие от match_parent и wrap_content)? Делай match_parent и wrap_content влияют на макет или они игнорируются в новом макете ограничений?

любить эту новую систему компоновки для моего любимого платформа!

8 52

8 ответов:

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

и 0dp может быть определено позицией, где match_parent полагается на его родителя для его позиции (x,y и ширина, высота)

match_parent Не допускается. Но вы можете фактически установить ширину и высоту в 0dp и установить либо верхние и нижние, либо левые и правые ограничения на "родитель".

Так, например, если вы хотите иметь match_parent ограничение на ширину элемента, вы можете сделать это так:

<TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"/>

видимо match_parent - это :

  • НЕ ОК для просмотра непосредственно под ConstraintLayout
  • ОК для представлений, вложенных внутри представлений, которые находятся непосредственно под ConstraintLayout

так что если вам нужно ваши взгляды, чтобы функционировать как match_parent, тогда:

  1. прямой детей на ConstraintLayout должны использовать 0dp
  2. вложенные-элементы(например, внук ConstraintLayout) можно использовать match_parent

пример:

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="16dp">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/phoneNumberInputLayout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/phoneNumber"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </android.support.design.widget.TextInputLayout>

match_parent не поддерживается ConstraintLayout. Установите ширину в 0dp чтобы он соответствовал ограничениям.

С официальный док:

важно: MATCH_PARENT не рекомендуется для виджетов, содержащихся в a ConstraintLayout. Подобное поведение можно определить с помощью MATCH_CONSTRAINT с соответствующим слева / справа или сверху / снизу ограничения устанавливаются в "родитель".

Так что если вы хотите добиться MATCH_PARENT эффект, вы можете сделать это:

<TextView
    android:id="@+id/textView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="TextView"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

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

    <Button
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>

установите ширину или высоту(что когда-либо нужно , чтобы соответствовать родителю ) в 0dp и установите поля слева, справа, сверху, снизу, чтобы действовать как родитель матча

в офисе doc: https://developer.android.com/reference/android/support/constraint/ConstraintLayout

когда размер установлен в MATCH_CONSTRAINT, поведение по умолчанию должно иметь результирующий размер, занимающий все доступное пространство.

с помощью 0dp, что эквивалентно "MATCH_CONSTRAINT"

важно: MATCH_PARENT не рекомендуется для виджетов, содержащихся в ConstraintLayout. Подобное поведение можно определить с помощью MATCH_CONSTRAINT с соответствующими левыми/правыми или верхними / нижними ограничениями, установленными в "parent"