ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ConstraintLayout(1)
    Android 2021. 6. 11. 12:58

    ConstraintLayout는 layout에 배치되는 뷰들에 여러 제약(Constraint)을 적용하여 각 뷰의 위치와 크기를 결정한다. 여기서 말하는 "제약(Constraint)"이란, 각 요소들의 최종 위치와 크기를 결정하게 될 조건, 예를 들어, 특정 뷰 왼쪽 사이드를 지정된 뷰의 오른쪽 사이드에 맞추거나, 뷰의 왼쪽, 오른쪽 사이드를 각각 부모 레이아웃의 왼쪽, 오른쪽 사이드에 맞추는 것 등을 말하며, 이러한 각각의 제약(Constraint)은 컨스트레인트레이아웃이 가지는 하나의 레이아웃 속성으로 매핑된다.

    ConstraintLayout을 프로젝트에 추가

    build.gradle 파일에 다음 dependencies를 추가

    dependencies {
        implementation "androidx.constraintlayout:constraintlayout:2.0.4"
        // To use constraintlayout in compose
        implementation "androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha06"
    }

    ConstraintLayout 속성 기본 사용법

    ConstraintLayout이 제공하는 constraint(제약조건)들은 기본적으로 'layout_constraint'로 시작하며, 뒤에 구체적인 제약 조건이 명시된다.

     

     layout_constraintXXX ( XXX = 구체적인 제약 조건) 

    constraint(제약조건)

    가로축 상의 배치는 leftrightstart 그리고 end 속성으로 할 수 있으며, 세로축 상의 배치는 topbottom 그리고 text에 한해서 baseline을 지정할 수 있다

    이미지 출저 : 찰스의 안드로이드

    여백을 주고 싶다면 margin을 이용하면 된다. 여백에 들어가는 값은 오직 0 또는 양수값만 적용할 수 있다.

    이미지 출저 : 찰스의 안드로이드

    GuideLine은 View의 위치를 잡는데 도움을 주는 유틸리티 클래스로 기본적인 동작은 visibility의 상태는 View.GONE, 기본적인 사이즈는 0dp이다. 

    app:layout_constraintGuide_begin  : 시작 지점으로 부터의 거리

    app:layout_constraintGuide_end  :  끝 지점으로 부터의 거리

    app:layout_constraintGuide_percent : 시작 지점으로 부터의 % 위치

    Example

    출처 (https://github.com/android/views-widgets-samples)

    1. Basic Centering

    Centered Button의 코드를 확인해보자.

        <Button
            android:id="@+id/button3"
            android:layout_width="201dp"
            android:layout_height="wrap_content"
            android:text="@string/centered_button"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            android:layout_marginTop="31dp"
            app:layout_constraintTop_toBottomOf="@+id/textView2"/>

    app:layout_constraintRight_toRightOf="parent"

    Centered Button의 오른쪽 사이드(right)를 parent의(Of) 오른쪽(ToRight)에 맞추라는 의미이다.

    app:layout_constraintTop_toBottomOf="@+id/textView2"

    Centered Button의 위쪽 사이드(top)를 속성 값으로 지정된 ID 뷰의(Of) 아래쪽 사이드(ToBottom)에 맞추라는 의미이다.

    만약 View를 중앙정렬하고 싶다면 다음과 같이 배치하면 된다. 

        <Button		
            ...
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            ...
    	/>

    Button33의 코드를 확인해보자.

        <Button
            android:id="@+id/button33"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="button33"
            app:layout_constraintRight_toRightOf="@+id/button3"
            app:layout_constraintLeft_toRightOf="@+id/button3"
            app:layout_constraintBottom_toTopOf="@+id/button32"
            app:layout_constraintTop_toTopOf="@+id/button32"
            app:layout_constraintHorizontal_bias="0.5" />

    app:layout_constraintHorizontal_bias="0.5"

    수평 방향(Left/Right 또는 Start/End) 사이드 제약 시, 양 사이드 간 위치 비율을 0.5(50%)로 맞추라는 의미이다.

    default값은 0.5이다. 0.5보다 작으면 왼쪽으로 크면 오른쪽으로 배치된다.

    2. GuideLine

        <androidx.constraintlayout.widget.Guideline
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/guideline"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.85" />
    

    android:orientation="vertical"

    app:layout_constraintGuide_percent="0.85"

    수직으로 배치되었고 가로 전체길이 기준으로 85%위치되는 지점에 배치되었다는 의미이다.

     

    Button4 코드를 확인해보자

        ....
        
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:text="Button4"
            android:layout_marginStart="8dp"
            app:layout_constraintLeft_toLeftOf="@+id/guideline"
            android:layout_marginLeft="8dp"
            app:layout_constraintBaseline_toBaselineOf="@+id/button5"
            app:layout_constraintRight_toLeftOf="@+id/guideline3"
            android:layout_marginRight="8dp"
            app:layout_constraintHorizontal_bias="0.9" />    
            
        <androidx.constraintlayout.widget.Guideline
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/guideline"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.15" />
            
        <androidx.constraintlayout.widget.Guideline
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/guideline3"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.5" />
            
            ....
            

     

    tools:layout_constraintXXX_creator

    namespace가 암시하듯이 Android Studio에서만 사용된다. 이러한 속성은 xml 파일이 기기에 푸시될 때 실제로 제거된다. 

    References

    'Android' 카테고리의 다른 글

    Room Database  (0) 2021.06.14
    ConstraintLayout(2)  (0) 2021.06.13
    Room And Coroutines  (0) 2021.06.10
    LiveData beyond the ViewModel  (0) 2021.06.04
    LiveData  (0) 2021.05.30
Designed by Tistory.