안드로이드 학습 - Constraint Layout

cherrylime69·2022년 3월 29일
0

안드로이드

목록 보기
1/6

📚 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의 배치가 가능)
  • 제약 조건을 통해 다양한 포지셔닝이 가능하며 이에 대한 자세한 설명과 그림이 공식문서에서 잘 설명되어 있어 아래에 나오는 공식 문서를 참고해 주시기 바랍니다.

참고 자료

  1. 공식문서
    안드로이드 개발 참조문서 ConstraintLayout
    안드로이드 개발 참조문서 ConstraintLayout.LayoutParams
    ConstraintLayout으로 반응형 UI 빌드
    안드로이드 개발 참조문서 레이아웃 항목
  2. 블로그
    개발자 레시피 - 레이아웃
profile
개발자 일기

0개의 댓글