안드로이드 학습 - Constraint Layout
📚 Constraint Layout
👀 레이아웃이 뭐야?

- 레이아웃은 앱에서 사용자 인터페이스를 위한 구조(예: Activity)를 정의하는
ViewGroup
객체를 뜻합니다.
View
란 사용자가 상호작용할 수 있는 화면이며, View 객체를 위젯
이라고 합니다.
- Layout 클래스는 View 위젯들을 그룹화하여 배치하기 위한 용도로 사용되는 ViewGroup이며, 자체적인 UI 표시 기능이나 사용자 이벤트 처리 기능은 매우 제한적으로 사용됩니다.
👀 Constraint layout이 뭐야?
- 과거 "UI 구성의 유연함"보다 "배치의 직관성"이 중요한 시기에는 여러 레이아웃이 중첩하여 UI를 구성하였습니다.
- 하지만 레이아웃을 중첩하여 UI를 구성하면 성능 및 유지보수 측면에서 효율적이지 못합니다. (Depth가 늘어나 가독성이 떨어짐)
- 이에 레이아웃을 중첩하지 않고 위젯들을 유연하게 배치할 수 있는 Constraint layout이 나오게 되었습니다.
👀 다른 layout은 별로인가?
- Constraint Layout말고 Linear layout, Relative layout, Frame layout 등이 있으나 Constraint layout으로 모두 대체 가능합니다.
- 이전에 대표적으로 쓰였던 Linear layout과 Relative layout에 대해 간단하게 설명하겠습니다.
👉 Linear layout
- LinearLayout은 세로 또는 가로의 단일 방향으로 모든 하위 요소를 정렬하는 뷰 그룹입니다. android:orientation 속성을 사용하여 레이아웃 방향을 지정할 수 있습니다.
- 다른 방향으로 view들을 배치하기 위해서는 Linear layout을 다시 Linear layout으로 감싸서 orientation을 변경해야 합니다. 즉, 레이아웃을 중첩해야만 합니다.
👉 Relative layout
- RelativeLayout은 상대 위치에 하위 뷰를 표시하는 뷰 그룹입니다. 각 뷰의 위치는 동위 요소(예: 다른 뷰의 왼쪽 또는 아래)에 상대적이거나 상위 RelativeLayout 영역(예: 맨 아래, 왼쪽 또는 중앙으로 정렬됨)에 상대적인 위치로 지정될 수 있습니다.
👀 Constraint layout의 장점
- 오늘날 대부분의 레이아웃이 Constraint layout으로 대체되는데 그 이유는 앞서 설명했듯이 view나 다른 layout을 유연하게 배치할 수 있어 중첩(Depth)을 최소화할 수 있기 때문입니다.
- Constraint layout은 Linear layout과 Relative layout의 특성을 모두 가지고 있습니다.
- constraint layout은 가로, 세로에 각각 최소 1개의 제약 조건을 추가하여 다른 view의 상대적인 위치에 따라 view를 배치할 수 있으며(relative layout), view들이 서로 제약 조건을 연결하여 chain화하여 그룹화할 수 있습니다. (linear layout)
- Linear layout
- view에 가중치를 주어 위치 등을 지정할 수 있습니다.
- 체인(chain)을 사용하여 view들을 그룹화하여 관리할 수 있습니다.
- Relative layout
- 다른 view 또는 레이아웃의 위치에 따라 view의 위치를 지정할 수 있습니다.
(상대적 위치에 따른 view의 배치가 가능)
- 제약 조건을 통해 다양한 포지셔닝이 가능하며 이에 대한 자세한 설명과 그림이 공식문서에서 잘 설명되어 있어 아래에 나오는 공식 문서를 참고해 주시기 바랍니다.
참고 자료
- 공식문서
안드로이드 개발 참조문서 ConstraintLayout
안드로이드 개발 참조문서 ConstraintLayout.LayoutParams
ConstraintLayout으로 반응형 UI 빌드
안드로이드 개발 참조문서 레이아웃 항목
- 블로그
개발자 레시피 - 레이아웃