본문 바로가기
안드로이드 개발

Android ConstraintLayout 공부 01

by 아이엔 / ienground 2019. 6. 24.

항상 Android 새로운 프로젝트를 생성하면 ConstraintLayout이 기본으로 되어 있고, 필자는 RelativeLayout을 애용하는 편입니다. 그런데 스크롤에 따라서 위젯의 사이즈와 위치를 바꾸려고 하니까 MotionLayout과 ConstraintLayout을 이용해야 한다고 합니다. 그래서 ConstraintLayout을 배워보려고 합니다.

 

먼저 ConstraintLayout은 "복잡한 레이아웃을 단순한 계층구조를 이용하여 표현할 수 있는 ViewGroup"이라고 하네요.  형제 뷰들과의 관계를 정의해서 레이아웃을 구성, 제가 애용하는 RelativeLayout과 비슷하지만 더 유연하게 사용한다고 합니다. 그래서 자식 뷰의 위치를 잡는 기준은 다음과 같다고 해요.

app:layout_constraint[기준1]_to[기준2]of="[viewId|parent]"
[기준1]의 방향을 [기준2]의 방향 위치에 정렬

 

공부를 한 블로그의 내용에 따르면, 상황이 어떻게 될 지 모르기 때문에 Top, Bottom, Start, End 네 방향을 모두 정의하는 것을 추천한다고 합니다.

 

뷰 크기를 지정할 때

1. match_parent (X) → match_constraint (0dp)

match_constraint는 가능한 영역을 모두 채우기 때문에, 우리가 알고 있는 match_parent와 같다네요.

 

2. dimentionRatio : 뷰의 가로, 세로 비율 결정

가로/세로 의 꼴로도 나타낼 수 있고, 가로:세로의 꼴로도 나타낼 수 있다고 합니다. (1 또는 1:1) 그리고 이걸 적용할 때는 width나 height 중 하나는 match_constraint (0dp)로 해 두어야 한다네요 (당연한 소리).

 

3. 최대/최소 길이를 지정할 때는

app:layout_constraintWidth_[min/max]="사이즈"

 

뷰 위치를 지정할 때

1. bias라는 키워드를 사용하는데, 영역 크기를 분배하는 비율이라고 합니다. 

제대로 공부하지 않고 사용하려는데 정렬과 관련된 속성이 안 보여서 당황했는데, 이 속성으로 지정하나 봅니다.

app:layout_constraintVertical_bias="0-1"

Vertical의 경우 0은 가장 위, 0.5는 가운데, 1은 가장 아래를 의미하고, Horizontal의 경우 0은 가장 왼쪽, 0.5는 가운데, 1은 가장 오른쪽을 지정합니다.

 

2. guideline이라는 속성은 가로 또는 세로 방향을 가진 가상의 뷰로 부모 뷰의 특정 위치를 기준점으로 사용하여 위치를 지정한다네요. 축, 그리고 위치 값을 속성으로 가진답니다.

 

android:orientation="vertical"

위치

<!--시작 지점으로 부터의 거리-->
app:layout_constraintGuide_begin="10dp"
<!--끝 지점으로 부터의 거리-->
app:layout_constraintGuide_end="10dp"
<!--시작 지점으로 부터의 % 위치-->
app:layout_constraintGuide_percent="0.8"

퍼센트 위치라고 하는데 정확히는 0~100%가 아니라 0~1입니다. 다시 말해 10%을 하고 싶으면 10이 아니라 0.1을 적어야 10%만큼의 위치정보값을 가지나 봅니다.

 


Vertical LinearLayout처럼 위 아래로 계속 쌓는 법 : 

layout1

layout2 구조일 때, layout2에 app:layout_constraintTop_toBottomof="@+id/layout1" 하면 계속 아래로 쌓이게 된다.

ID를 모두 주자.

 

공부 내용 출처 : kimch3617.tistory.com/entry/ConstraintLayout의-개념과-기본-사용법