Установите ширину для соответствия ограничениям в ConstraintLayout
Я хотел бы ограничить вид левой и правой сторон полями родительского представления и заполнить выделенное пространство. Тем не менее, установка ширины для match_parent
или wrap_content
, как представляется, дает тот же результат.
Есть ли что-то эквивалентное match_constraints (в отличие от match_parent и wrap_content)? Влияют ли теги match_parent
и wrap_content
на макет или игнорируются ли они в новом шаблоне ограничений?
Любить эту новую систему макетов для моей любимой платформы!
Ответы
Ответ 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" />