ConstraintLayout의 제약 조건과 일치하도록 너비 설정


98

뷰의 왼쪽과 오른쪽을 부모 뷰의 여백으로 제한하고 할당 된 공간을 채우고 싶습니다. 그러나 너비를 match_parent또는 중 하나로 설정 wrap_content하면 동일한 결과가 생성되는 것으로 보입니다.

match_constraints와 동등한 것이 있습니까 (match_parent 및 wrap_content와 반대)? 수행 match_parentwrap_content레이아웃에 영향을하거나 새로운 제약 레이아웃 무시됩니다?

내가 좋아하는 플랫폼을위한이 새로운 레이아웃 시스템을 좋아합니다!


1
match_parent당신을 위해 작동하지 않습니까?
Eugen Martynov

답변:


125

match_parent지원되지 않습니다. 을 사용하면 0dp제약 조건을 '남은 것을 채우기'보다는 '확장 가능'하다고 생각할 수 있습니다.

또한 위치 (x, y 및 너비, 높이)에 대해 상위에 의존 0dp하는 위치로 정의 할 수 있습니다.match_parent


31
왜이 대답이 허용됩니까?!? match_parent는 제약 레이아웃에서 지원되지 않습니다. 그리고이 대답은 그것을 구현할 방법을 제공하지 않습니다.
Daniele Segato

3
match_parent는 지원되지 않습니다.
Nicolas Roard

7
정답입니다. match_parent가 지원되지 않는다고 분명히 명시합니다. 또한 'match_parent'설정에 대한 합리적인 대안을 수행하기 위해 제약 조건이 왼쪽과 오른쪽에 부모로 설정된 0dp (여백 0 또는 적합하도록 선택)는 동일한 결과를 제공합니다. Arieck의 대답에있는이 답변에서 실제로 제외 된 유일한 것은 양쪽 (또는 수직의 경우 상단 및 하단)에 제약 조건을 설정해야한다는 것입니다. 이것이 내가하는 방법이며 문제가 없었습니다. 또한 다른 구성 요소와 함께 사용할 때 무게 설정으로도 작동합니다.
Eric Engel 2017 년

누군가가 여기에 오면 작동하지 않습니다. 베타에서 망가진 것 같습니다. 1.0.2에서 작동하는 것 같습니다. 교훈-라이브러리를 동결하고 기회 주의적 업데이트를 사용하지 마십시오.
inteist

1
@Tequilaman 코멘트가 답이 될 수 있습니다. 그는 그것을 구현하는 방법을 올바르게 지적했습니다. 0dp 여백으로 양쪽에 제한을 생성하면 트릭을 수행합니다.
Utkarsh Mankad

169

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"/>

4
Android 팀은 "match_parent"가 작동하도록해야합니다. 매우 쉬울 것입니다. match_parent가 앱이 부모의 시작과 끝으로 제한되는 것처럼 동일한 기능을 제공하도록 만드십시오. 수직 또는 수평으로 쉽게 감지 할 수 있습니다.
bharv14

그러나 0dp가 이중 측정을 초래하지 않습니까?
프라 모드 Garg를

25

분명히 match_parent:

  • 바로 아래의보기에는 적합 하지 않음ConstraintLayout
  • 바로 아래에있는 뷰 내부에 중첩 된 뷰의 경우 OKConstraintLayout

따라서 뷰가으로 작동해야하는 경우 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>

ConstraintLayout에 중첩 된 ConstraintLayout은 어떻습니까? 예제에서 TextInputLayout을 ConstraintLayout으로 변경합니까?
수퍼 유저


13

로부터 공식 문서 :

중요 : 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" />

4

어댑터를 확인할 수 있습니다.

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

1 번 사용할 때도 똑같은 문제가 있었어요. 2 번 시도해보세요.


이것은 금입니다! 감사합니다!
grrigore

3

match_parent로보기를 직접 만드는 것은 불가능하지만 약간 다른 방식으로 할 수 있지만 Start 및 End와 함께 Left 및 Right 속성을 사용하는 것을 잊지 마십시오. RTL 지원을 사용하는 경우 coz가 필요합니다.

    <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"/>

2

너비 또는 높이 (부모와 일치하는 데 필요한 것)를 0dp로 설정하고 왼쪽, 오른쪽, 위쪽, 아래쪽 여백을 설정하여 일치하는 부모 역할을합니다.


1

사무실 문서 : https://developer.android.com/reference/android/support/constraint/ConstraintLayout

차원이 MATCH_CONSTRAINT로 설정된 경우 기본 동작은 결과 크기가 사용 가능한 모든 공간을 차지하도록하는 것입니다.

"MATCH_CONSTRAINT"에 해당하는 0dp 사용

중요 : MATCH_PARENT는 ConstraintLayout에 포함 된 위젯에 권장되지 않습니다. MATCH_CONSTRAINT를 사용하여 해당하는 왼쪽 / 오른쪽 또는 위쪽 / 아래쪽 제약 조건을 "부모"로 설정하여 유사한 동작을 정의 할 수 있습니다.


0

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>

0

스크롤 뷰 안에 제약 레이아웃이있을 때 답을 하나 더 찾았습니다.

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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.