앞 게시글에서 Palette에서 자주 사용되는 View에 대해 알아보았다.
이번에는 Palette의 또 다른 카테고리인 Layout에 대해서 다루어 보겠다.
안드로이드 Layout 클래스는 View 위젯들을 화면에 배치하는 과정에서 위젯의 위치를 정렬하거나 연관된 위젯들을 그룹화하는 역할을 수행한다. 즉, Layout 클래스는 View 위젯들을 그룹화하여 배치하기 위한 용도로 사용되는 ViewGroup이다. 하지만 자체적인 UI 표시 기능이나 사용자 이벤트 처리 기능은 매우 제한적으로 사용된다.
1. LinearLayout
- LinearLayout의 Linear은 '선형'이라는 뜻이다. 따라서 LinearLayout은 화면은 가로방향이나 세로방향으로 나열할 때 사용하는 Layout이다.
- Horizontal(가로, 수평) 방향과 Vertical(세로, 수직) 방향으로 나뉜다.
- LinearLayout의 자식 View 위젯들은 한 방향으로만 배치되고, 서로 중첩되지 않고 지정한 방향으로 쌓이는 형태로 표현된다.
- LinearLayout의 구성요소로 layout_weight가 있다. 각 View 위젯들이 차지하는 영역을 dp 등의 고정적인 수치로 나타낼 수도 있지만 전체 영역 대비 비율의 느낌으로 가중치를 지정하여 설정해 줄 수 있다. 자식 View위젯의 Weight(가중치) 값이 클 수록, 화면에서 더 많은 영역을 차지한다.
2. RelativeLayout
- RelativeLayout에서 Relative는 '상대적'이라는 의미이다. 즉, 어떤 View와의 상대적인 위치를 지정하는 Layout이다. 이때 View 위젯 뿐만이 아니라 Parent와의 상대적인 위치 설정도 가능하다.
3. FrameLayout
- FrameLayout은 여러 View 위젯을 자식으로 추가하면 겹쳐지는 형태로 표현되며 가장 최근에 추가된 View 위젯이 가장 상위(On Top)에 나타난다. 이러한 특징을 이용해서 가장 상위의 View 위젯만 표시하고 나머지는 보이지 않게 만듦으로써 하나의 자식 View만 표시할 수 있다.
4. TableLayout
- View를 행과 열로 구성된 표(Table)와 같은 형식으로 나누어서 표시하는 Layout이다.
- TableLayout에 View 위젯을 추가하기 위해서는 먼저 TableRow 클래스를 사용하여 하나의 행을 추가해주어야 한다. 여기서 각 추가된 행에 View 위젯을 추가하면 테이블 형태로 정렬되어 표시된다.
- TableLayout의 전체 열(Column) 갯수는 TableRow 중 가장 많은 열의 갯수에 맞춰진다.
5. GridLayout
- GridLayout에서의 Grid는 '격자'라는 뜻이다. 즉, 2차원의 행과 열로 구성된 Layout이다.
- TableLayout과 유사하지만 자식(View)를 순서대로 배치하기 때문에 TableLayout보다는 LinearLayout과 좀 더 유사하다.
6. ConstraintLayout
- ConstraintLayout은 평평한 구조를 가진 Layout으로 Layout을 구성할 때 자식(View)들에게 여러가지 제약(Constraint)을 적용해서 각 View의 위치와 크기를 유연하게 조절할 수 있다.
- 개발자가 설정해줄 수 있는 제약 사항은 아래와 같다.
- Margins: 여백
- Centering Positioning: 중앙 배치
- Visibility Behavior: 가시성에 기반한 동작
- Dimension Constraints: 치수 제약
- Chains: 일련 관계
- Virtual Helpers Objects: 가장 지원 객체
- View의 연결점과 대상을 어디에 연결하느냐에 따라 위치가 결정된다.