개발/Android

제약 레이아웃(Constraint Layout)

Debin 2022. 4. 5.
반응형

레이아웃은 화면을 구성하는 뷰들을 배치하는 컨테이너로서 다양한 유형의 레이아웃을 제공한다.

아래와 같은 레이아웃들을 확인할 수 있다.

 

레이아웃 이름 설명
제약 레이아웃
(ConstraintLayout)
제약 조건 (Constraint) 기반 모델
제약 조건을 사용해 화면을 구성하는 방법
안드로이드 스튜디오에서 자동으로 설정하는 기본 레이아웃
리니어 레이아웃
(LinearLayout)
일정한 방향으로 위젯들을 배치 - 박스 모델
여러 개의 위젯을 순차적으로 배열
표준 자바의 BoxLayout과 유사 - UI를 일렬로 배치하는 레이아웃
상대 레이아웃
(RelativeLayout)
규칙 기반 모델
부모 컨테이너(레이아웃)나 다른 뷰와의 상대적 위치를 이용해 화면을 구성하는 방법
프레임 레이아웃
(FrameLayout)
싱글 모델
하나의 뷰만 보여주는 방법(나머지는 중첩되어 숨겨져 있음)
여러 개의 뷰를 추가하는 경우, 뷰를 중첩한 후 각 뷰를 전환하여 보여주는 방식으로,
스마트 폰의 한정된 공간에 많은 정보를 표시하기 위해 간편하게 탭 화면을 구현할 수 있다.
테이블 레이아웃
(TableLayout)
격자(Grid) 모델
격자 모양의 배열을 사용하여 화면을 구성하는 방법
HTML에서 많이 사용하는 정렬 방법과 유사하다

이중에서도 오늘 은 제약 레이아웃에 대해 알아보겠다.

제약 레이아웃 

  • 뷰(위젯)와 뷰, 혹은 뷰와 레이아웃 간의 관계를 정렬 기준을 지정하며, 관계 설정은 단방향으로만 가능하다.
  • 제약 레이아웃은 복잡한 레이아웃을 배치하는 데 용이하다.
  • 제약 레이아웃에서 뷰를 배치하기 위해서는 뷰의 가로 및 세로 제약 조건을 하나 이상 추가해야 한다.
  • 제약 조건이란 뷰가 레이아웃 안의 다른 요소와 어떻게 연결(관계)되는지를 알려주는 것으로 뷰의 연결점(Anchor Point)과 대상(Target)을 연결하여 관계를 설정한다.
  • 뷰의 위, 아래, 왼쪽, 오른쪽의 연결점을 부모 레이아웃 또는 다른 뷰의 연결점과 연결하면 제약조건 생성
  • 연결점을 연결할 수 있는 타깃은?
    • 같은 레이아웃 안에 들어 있는 다른 뷰의 연결점
    • 부모 레이아웃의 연결점
    • 가이드라인(Guideline) - 가이드라인은 실행 시 안보인다.
  • 뷰(소스)와 타깃의 연결점은?
    • Top, Bottom, Left, Right
    • 가로축의 가운데(CenterX), 세로축의 가운데(CenterY)
    • 베이스라인 - 텍스트를 보여주는 뷰인 경우만 적용한다.

 

제약 레이아웃 내에 배치되는 뷰(위젯)의 크기 및 정렬 기준은 세 가지의 핸들을 사용하여 조정한다.

뷰와 뷰, 또는 뷰와 레이아웃 간의 관계로 정렬 기준을 지정하며, 관계 설정은 단방향으로만 가능하다.

제약 레이아웃 Handle 방법

1. Resize Handle : 뷰의 꼭짓점에 있는 네모 모양을 드래그하여 뷰의 크기를 조정한다.

 

2. Side Constraint Handle : 제약 레이아웃에 뷰를 추가하면 각 모서리에 정사각형의 크기 조절 핸들과 각 면에 원형의 제약조건 핸들이 있는 박스가 표시된다. 뷰의 각 변에 제약조건 핸들(원형)을 드래그하여 수평 및 수직 축에 연결한다.(연결점과 타깃을 연결한다.) 연결은 같은 제약 레이아웃 내 있는 다른 뷰 또는 레이아웃 축을 기준으로 할 수 있으며, 같은 축 방향끼리만 연결 가능하다.

 

3. Baseline Constraint Handle : 베이스라인(밑줄) 정렬 제약 - 텍스트를 보여주는 뷰인 경우에만 사용한다.

뷰 텍스트의 베이스라인(기준선)에 다른 뷰 텍스트의 베이스라인을 맞춰 정렬한다.

Baseline Constraint Handle

 

4. Guideline Handle

수평 또는 수직의 가이드라인을 추가하고 가이드라인을 기준으로 정렬에 제약을 준다.

Guideline Handle

제약 규칙

모든 뷰에는 가로와 세로 하나씩 두 개 이상의 제약 조건이 있어야 한다.

같은 평면을 공유하는 기준점과 제약 핸들만이 제약을 만들 수 있다.

즉 수직의 평면(좌, 우 영역)은 오직 다른 뷰의 수직 평면(좌,우 영역)에만 제약을 걸 수 있다.

각가의 제약 핸들은 하나의 제약 만을 위해 사용될 수 있다.

단, 같은 기준점에 여러 개의 제약을 만들 수 있다.

 

제약의 종류

1. 부모 제약

부모 레이아웃의 연결점과 연결하여 제약 설정

 

부모 제약

2. 위치 제약

두 개의 뷰들 간의 순서를 정의한다 ( 수평 또는 수직 간)

위치 제약

3. 정렬 제약

다른 뷰의 가장자리에 뷰의 가장자리를 정렬

정렬 제약

체인

체인은 양방향(수직/수평) 위치 제약 조건을 통해 서로 연결된 뷰의 그룹이다.

체인모드

  • Spread : 뷰를 균등하게 배치(여백을 정리한 후)
  • Spread inside :  첫 번째 뷰와 마지막 뷰는 체인의 각 끝에 있는 제약조건에 고정되고, 나머지 뷰는 균등하게 배치한다.
  • Weighted : 가중치에 따라 공간 지정, 가중치가 높은 뷰에 가장 많은 공간이 지정되고, 가중치가 동일한 뷰는 동일한 크기의 공간을 지정한다.
  • Packed : 뷰가 여백을 제외한 간격 없이 배치한다.

체인 모드

연결선이 만들어내는 XML 속성의 형식

아래와 같은 규칙으로 만들어진다,

layout)constraint[소스 뷰의 연결점]_[타깃 뷰의 연결점] = "[타깃 뷰의 id]"

규칙 예시

좌측은 Start, 우측은 End, 위는 Top, 아래는 Bottom 으로 사용한다.

이상으로 포스팅을 마치겠습니다. 감사합니다

 

반응형

댓글