안드로이드 스튜디오 :: 제약 레이아웃 (Constraint Layout)

Android/공통 2020.07.08 댓글 moonsu
728x90

안드로이드 스튜디오의 디폴트 레이아웃은 Constraint Layout(제약 레이아웃)이다.

제약 레이아웃의 가장 큰 특징은 뷰의 크기와 위치에 제약조건을 즉, 다른 대상에 어떻게 연결되어 있는지 알려주는 조건을 걸어 뷰를 배치하는 것이다.

 

뷰에는 상하좌우 4개의 연결점이 존재

 

앞서 제약조건은 대상에 어떻게 연결되어 있는가라고 말했다. 뷰는 상하좌우에 각각 연결점을 갖고 있다. 그리고 대상(타겟)은 다음과 같은 것들이 될 수 있다.

1. 부모 레이아웃

2. 같은 레이아웃에 있는 다른 뷰

3. 가이드라인

 

또한 아래 속성들을 사용하여 뷰와 뷰를, 뷰와 레이아웃 등을 연결할 수 있다.

layout_constraintTop_toTopOf
layout_constraintTop_toBottomOf

layout_constraintBottom_toTopOf
layout_constraintBottom_toBottomOf

layout_constraintLeft_toTopOf
layout_constraintLeft_toBottomOf
layout_constraintLeft_toLeftOf
layout_constraintLeft_toRightOf

layout_constraintRight_toTopof
layout_constraintRight_toBottomof
layout_constraintRight_toLeftof
layout_constraintRight_toRightof

속성이 많아보이지만 사실 굉장히 단순하다.

>> layout_constraint[자신의연결점]_to[대상의연결점]Of

 

각 속성은 외부라이브러리에 속해있긱 때문에 사용하기 위해선 "app:" 접두어를 붙혀야 한다.

>> app:layout_constraint[자신의연결점]_to[대상의연결점]Of

 

그렇다면 대상은 어떻게 지정할 수 있을까?

>> app:layout_constraint[자신의연결점]_to[대상의연결점]Of = "@+id/[대상의아이디]"

 

예를들어 A버튼과 B버튼이 있을 때 A를 B 위에 두고 싶다면

 

 

app:layout_constraintBottom_toTopOf = "@+id/B"

 

 

 

 

 

이런식으로 사용하면 된다.

만약 해당 속성을 A버튼이 아닌 B버튼에 넣고 싶다면 자신과 대상이 바뀌는 것이니

app:layout_constraintTop_toBottomOf = "@+id/A"

이렇게 바뀔 것이다. 또한 같은 레이아웃에 속해 있는지 한번 더 살펴보자.

 

부모 레이아웃에 연결할 때도 마찬가지이다. 다만 한가지, 부모 레이아웃은 id를 지정하지 않아도 된다.

물론 id를 지정해서

app:layout_constraint[내꺼]_to[부모]Of = "@+id/레이아웃아이디" 이렇게 작성할 수도 있지만

app:layout_constraint[내꺼]_to[부모]Of = "parent" 그저 parent 하나로도 충분하다.

 

 

+API17 부터 Start, End를 사용하는 속성이 추가되었다.

안드로이드 스튜디오 :: Start와 Left, End와 Right 차이

728x90
반응형

댓글