Я хотел бы ограничить левую и правую стороны представления полями родительского представления и заставить его заполнять выделенное пространство. Однако установка ширины на или match_parent
или wrap_content
дает тот же результат.
Есть ли что-то эквивалентное match_constraints (в отличие от match_parent и wrap_content)? Есть match_parent
и wrap_content
влияют на расположение или они игнорируются в новом макете ограничения?
Мне нравится эта новая система макетов для моей любимой платформы!
match_parent
у тебя не работает?Ответы:
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
, тогда:ConstraintLayout
должны использовать0dp
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
эффекта, вы можете сделать это:<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" />
источник
Вы можете проверить свой адаптер.
1 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater); 2 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater, viewGroup, false);
У меня была такая же проблема, как и у вас, когда я использовал 1. Вы можете попробовать 2.
источник
Сделать ваше представление как 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"/>
источник
установите ширину или высоту (что вам нужно для соответствия родителю) на 0dp и установите поля слева, справа, сверху, снизу, чтобы действовать как родительский элемент
источник
в офисном документе: https://developer.android.com/reference/android/support/constraint/ConstraintLayout
Если для размера задано значение MATCH_CONSTRAINT, по умолчанию полученный размер занимает все доступное пространство.
Использование 0dp, что эквивалентно "MATCH_CONSTRAINT"
Важно: MATCH_PARENT не рекомендуется для виджетов, содержащихся в ConstraintLayout. Подобное поведение может быть определено с помощью MATCH_CONSTRAINT с соответствующими ограничениями left / right или top / bottom, установленными на "parent"
источник
Если вы хотите, чтобы TextView находился в центре родительского элемента ..
Ваш основной макет - Constraint Layout
<androidx.appcompat.widget.AppCompatTextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/logout" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" android:gravity="center"> </androidx.appcompat.widget.AppCompatTextView>
источник
Я нашел еще один ответ, когда внутри представления прокрутки есть макет ограничения, тогда нам нужно поместить
android:fillViewport="true"
к просмотру прокрутки
а также
android:layout_height="0dp"
в компоновке ограничений
Пример:
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="0dp"> // Rest of the views </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView>
источник