Подтвердить что ты не робот

Установите ширину для соответствия ограничениям в ConstraintLayout

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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"/>

Ответ 3

По-видимому match_parent:

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

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

  • Прямые дети из ConstraintLayout должны использовать 0dp
  • Вложенные элементы (например, внук в 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>

Ответ 4

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

Ответ 5

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

Ответ 6

Для того, чтобы ваше представление как match_parent было невозможно напрямую, но мы можем сделать это немного по-другому, но не забудьте использовать атрибут Left и Right с Start и End, если вы используете поддержку 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"/>

Ответ 7

Из официального документа:

Важно: MATCH_PARENT не рекомендуется для виджетов, содержащихся в 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" />