设置宽度以匹配 ConstraintLayout 中的约束
Set width to match constraints in ConstraintLayout
我想将视图的左侧和右侧限制在其父视图的边距内,并使其填充分配的 space。但是,将宽度设置为 match_parent
或 wrap_content
似乎会产生相同的结果。
是否有等同于 match_constraints 的东西(相对于 match_parent 和 wrap_content)? match_parent
和 wrap_content
会影响布局还是会在新约束布局中被忽略?
match_parent
不受 ConstraintLayout
支持。将宽度设置为 0dp
以使其匹配约束。
不支持match_parent
,所以使用android:layout_width="0dp"
。使用 0dp
,您可以将约束视为 'scalable' 而不是 'filling whats left'。
此外,0dp
可以由位置定义,其中 match_parent
依赖于它的父位置(x、y 和宽度、高度)
match_parent
是不允许的。但是你实际上可以将宽度和高度设置为 0dp,并将顶部和底部或左右约束设置为 "parent"。
例如,如果你想对元素的宽度进行 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
下的视图
- OK 对于嵌套在直接位于
ConstraintLayout
下的视图中的视图
因此,如果您需要您的观点发挥 match_parent
的作用,那么:
ConstraintLayout
的直接子代 应该使用 0dp
- 嵌套元素 (eg, grandchild to 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>
将宽度或高度(你需要匹配父级的任何东西)设置为 0dp 并设置左、右、上、下的边距作为匹配父级
因为无法直接将视图设为 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"/>
来自official doc:
Important: MATCH_PARENT is not recommended for widgets contained in a
ConstraintLayout. Similar behavior can be defined by using
MATCH_CONSTRAINT with the corresponding left/right or top/bottom
constraints being set to "parent".
所以如果你想达到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" />
在办公室文档中:
https://developer.android.com/reference/android/support/constraint/ConstraintLayout
当维度设置为 MATCH_CONSTRAINT 时,默认行为是让生成的大小占用所有可用的 space。
使用 0dp,相当于 "MATCH_CONSTRAINT"
重要提示:不建议将 MATCH_PARENT 用于 ConstraintLayout 中包含的小部件。可以通过使用 MATCH_CONSTRAINT 将相应的 left/right 或 top/bottom 约束设置为 "parent"
来定义类似的行为
您可以检查您的适配器。
1 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater);
2 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater, viewGroup, false);
我用1的时候遇到了和你一样的问题。
你可以试试2.
如果你想让 TextView 位于父元素的中心..
您的主要布局是约束布局
<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>
我想将视图的左侧和右侧限制在其父视图的边距内,并使其填充分配的 space。但是,将宽度设置为 match_parent
或 wrap_content
似乎会产生相同的结果。
是否有等同于 match_constraints 的东西(相对于 match_parent 和 wrap_content)? match_parent
和 wrap_content
会影响布局还是会在新约束布局中被忽略?
match_parent
不受 ConstraintLayout
支持。将宽度设置为 0dp
以使其匹配约束。
match_parent
,所以使用android:layout_width="0dp"
。使用 0dp
,您可以将约束视为 'scalable' 而不是 'filling whats left'。
此外,0dp
可以由位置定义,其中 match_parent
依赖于它的父位置(x、y 和宽度、高度)
match_parent
是不允许的。但是你实际上可以将宽度和高度设置为 0dp,并将顶部和底部或左右约束设置为 "parent"。
例如,如果你想对元素的宽度进行 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
下的视图
- OK 对于嵌套在直接位于
ConstraintLayout
下的视图中的视图
因此,如果您需要您的观点发挥 match_parent
的作用,那么:
ConstraintLayout
的直接子代 应该使用0dp
- 嵌套元素 (eg, grandchild to 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>
将宽度或高度(你需要匹配父级的任何东西)设置为 0dp 并设置左、右、上、下的边距作为匹配父级
因为无法直接将视图设为 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"/>
来自official doc:
Important: MATCH_PARENT is not recommended for widgets contained in a ConstraintLayout. Similar behavior can be defined by using MATCH_CONSTRAINT with the corresponding left/right or top/bottom constraints being set to "parent".
所以如果你想达到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" />
在办公室文档中: https://developer.android.com/reference/android/support/constraint/ConstraintLayout
当维度设置为 MATCH_CONSTRAINT 时,默认行为是让生成的大小占用所有可用的 space。
使用 0dp,相当于 "MATCH_CONSTRAINT"
重要提示:不建议将 MATCH_PARENT 用于 ConstraintLayout 中包含的小部件。可以通过使用 MATCH_CONSTRAINT 将相应的 left/right 或 top/bottom 约束设置为 "parent"
来定义类似的行为您可以检查您的适配器。
1 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater);
2 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater, viewGroup, false);
我用1的时候遇到了和你一样的问题。 你可以试试2.
如果你想让 TextView 位于父元素的中心..
您的主要布局是约束布局
<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>