티스토리 뷰
ConstraintLayout이란?
ConstraintLayout은 android.view.ViewGroup에 속한 레이아웃이며 위젯의 위치(postion)와 크기(size)를 지정할 수 있게 해준다.
Constraint의 종류
- Relative positioning
- Margins
- Centering piositioning
- Circular positioning
- Visibility behavior
- Dimension constraints
- Chains
- Virtual Helpers objects
- Optimizer
Relative positioning
Constraint 레이아웃에서 가장 기초적인 개념이다. 대상 위젯의 위치를 지정할 때, 다른 위젯으로부터 상대적인 위치에 지정한다.
Margins
대상 위젯의 테두리 바깥의 여백 면적을 의미하며, 0 이상으로만 지정될 수 있다.
Centering piositioning and bias
constraintLeft_toLeftOf와 Right_toRightOf를 둘다 parent로 두면 기본적으로 정중앙에 위치하도록 포지셔닝한다. 이를 변경하고 싶다면 bias 속성을 사용하여 다르게 포지셔닝 할 수 있다.
Circular positioning
대상 위젯의 중간점으로부터 다른 위젯의 중간점까지의 각도와 거리를 지정하여 제약을 주는 것을 의미한다.
Visibility behavior
View.Gone에 속한 GONE 위젯은 뷰에서 보여지지 않으며 자리를 차지하지도 않는다. 하지만 대상 위젯에 적용된 면적은 그대로 유지된다.
Gone 제약은 일시적으로 위젯을 사라지게 하고 싶지만 레이아웃은 그대로 유지해야 할 때 유용하게 사용할 수 있다.
Dimension constraints
최소 너비(높이), 최대 너비(높이), 너비(높이) 지정, 비율과 관련된 제약을 말한다.
Chains
체인을 사용하면 하나의 수평/수직 축(axis)을 기준으로 여러개의 위젯들을 그룹화하여 움직일 수 있다. 하나의 축을 기준으로 체인을 지정하더라도 다른 축에 대한 제약은 독립적으로 적용할 수 있다. 즉, 수평 체인을 지정하더라도 수직으로 별개의 제약을 지정할 수 있다.
Virtual Helpers objects
앞서 설명했던 내장 함수 이외에도 ConstraintLayout에 포함된 helper를 이용하여 레이아웃을 조정할 수 있다. Guideline 객체를 사용하면 ConstraintLayout을 기준으로 하는 수평/수직 가이드라인을 만들 수 있으며, Barrier와 Group 속성도 사용할 수 있다. 가이드라인(Guideline)과 배리어(Barrier)는 렌더링되어 뷰에 나타나는 요소가 아니다. 주로 가이드라인에 위젯을 붙여 위젯의 위치를 쉽게 변경하기 위해 사용한다.
1. Guideline
가이드라인(Guideline)은 수평/수직 모두 적용할 수 있다. 수평 가이드라인의 height는 0이고 width는 parent인 ConstraintLayout에 맞춰져있다. 수직 가이드라인의 width는 0이고 height는 parent인 ConstraintLayout에 맞춰진다.
2. Barrier
배리어(Barrier)는 복수의 위젯을 참조하여 가상의 장벽을 만든다. 배리어 제약이 지정된 위젯들은 위치가 변경될 때 배리어에 맞게 변경이 된다. 이 때 배리어에 가장 가까이 있는 위젯(the most extreme widget on the specified side)을 기준으로 장벽을 만든다.
3. Group
그룹(Group) 헬퍼를 통해 복수의 위젯을 그룹화하여 아래와 같이 visibility 속성을 동시에 제어할 수 있다.
Optimizer
Constraint Layout 1.1 버전부터는 레이아웃의 속도를 높이기 위해 최적화 방법을 제공한다.
ConstraintLayout 요소에 app:layout_optimizationLevel 태그를 추가하여 아래와 같이 최적화 레벨을 지정할 수 있다.
none : 최적화 사용 안 함
standard : 디폴트 레벨
direct : 고정된 요소에 연결된 제약 조건에 관련된 최적화
barrier : barrier 제약 조건 관련 최적화
chain : 체인 제약 조건 최적화 (아직 테스트 중인)
dimensions : dimensions 측정 최적화 (아직 테스트 중)
공식문서
developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout?hl=ko
developer.android.com/training/constraint-layout?hl=ko
참고 자료
shinjekim.github.io/android/2019/08/07/Android-ConstraintLayout/
academy.realm.io/kr/posts/constraintlayout-it-can-do-what-now/
'Programming > 안드로이드(Android)' 카테고리의 다른 글
[안드로이드] Retrofit 구조와 사용하는 이유 (0) | 2021.03.22 |
---|---|
[Android] Constraint Layout (Virtual Helpers objects) (0) | 2021.03.05 |
안드로이드 리소스(xml) 명명 규칙 (0) | 2021.02.26 |
[Android] 안드로이드 4대 컴포넌트 - 초간단 (0) | 2020.12.20 |
[Android] 안드로이드 플랫폼 아키텍처 (0) | 2020.12.20 |