我希望将一个View的左右两侧限制在其父View的边距内,并使其填充分配的空间。然而,将宽度设置为match_parent
或wrap_content
似乎会产生相同的结果。
是否有与match_constraints(而不是match_parent和wrap_content)等效的选项?match_parent
和wrap_content
是否影响布局,或在新的约束布局中被忽略了?
我希望将一个View的左右两侧限制在其父View的边距内,并使其填充分配的空间。然而,将宽度设置为match_parent
或wrap_content
似乎会产生相同的结果。
是否有与match_constraints(而不是match_parent和wrap_content)等效的选项?match_parent
和wrap_content
是否影响布局,或在新的约束布局中被忽略了?
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
不被支持,所以请使用 android:layout_width="0dp"
。 使用 0dp
,你可以把你的限制条件理解为“可扩展”的而不是“填充剩余空间”的。
此外,0dp
可以通过一个位置定义,而 match_parent
则依赖于其父元素来确定它的位置(x、y 坐标和宽度、高度)。
显然,match_parent
在直接位于ConstraintLayout
下的视图上使用不可行,但可以在嵌套在直接位于ConstraintLayout
下的视图中使用。
因此,如果您需要将您的视图作为match_parent
来使用,则:
0dp
来设置ConstraintLayout
的直接子元素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
以使其匹配约束条件。
根据官方文档:
重要提示:不建议在 ConstraintLayout 中使用 MATCH_PARENT。可以通过将相应的左/右或上/下约束设置为“parent”并使用 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" />
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,并将左、右、上、下的边距设置为与父级匹配。
如果你想让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>
match_parent
对你不起作用? - Eugen Martynov