117

我想将视图的左侧和右侧限制为其父视图的边距并使其填充分配的空间。但是,将宽度设置为match_parentwrap_content似乎会产生相同的结果。

是否有与 match_constraints 等价的东西(与 match_parent 和 wrap_content 相对)?match_parent影响布局还是wrap_content在新的约束布局中被忽略?

4

10 回答 10

186

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"/>
于 2016-10-26T12:23:35.473 回答
151

match_parent不支持,所以使用android:layout_width="0dp". 使用0dp,您可以将您的约束视为“可扩展”而不是“填充剩下的内容”。

此外,0dp可以由一个位置定义,match_parent它的位置依赖于它的父级(x,y 和宽度,高度)

于 2016-07-05T18:33:59.140 回答
32

显然match_parent是:

  • 适合直接下的视图ConstraintLayout
  • 可以用于嵌套在直接下方的视图中的视图ConstraintLayout

因此,如果您需要您的视图作为match_parent,那么:

  1. ConstraintLayout应该使用的直接子0dp
  2. 嵌套元素 (例如,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>
于 2017-02-18T01:26:39.383 回答
18

match_parent不支持ConstraintLayout。将宽度设置0dp为使其匹配约束。

于 2016-06-03T07:04:32.880 回答
18

来自官方文档

重要提示:不建议将 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" />
于 2017-12-03T13:48:30.480 回答
7

您可以检查您的适配器。

 1 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater);
 2 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater, viewGroup, false);

我用1的时候和你有同样的问题,你可以试试2。

于 2019-02-21T08:50:47.717 回答
3

直接将您的视图设置为 match_parent 是不可能的,但我们可以用一些不同的方式来实现,但不要忘记在 Start 和 End 中使用 Left 和 Right 属性,因为如果您使用 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"/>
于 2017-09-19T04:55:41.090 回答
2

将宽度或高度(您需要匹配父级的内容)设置为 0dp 并设置左侧、右侧、顶部、底部的边距作为匹配父级

于 2017-04-18T07:37:49.973 回答
2

在办公室文档中: https ://developer.android.com/reference/android/support/constraint/ConstraintLayout

当维度设置为 MATCH_CONSTRAINT 时,默认行为是让结果大小占用所有可用空间。

使用 0dp,相当于“MATCH_CONSTRAINT”

重要提示:不建议将 MATCH_PARENT 用于 ConstraintLayout 中包含的小部件。可以通过使用 MATCH_CONSTRAINT 来定义类似的行为,并将相应的左/右或上/下约束设置为“父”

于 2018-06-24T13:51:58.697 回答
-1

如果您希望 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>
于 2019-11-27T09:06:34.590 回答