Jetpack Compose는 UI 구성요소를 구조화하고 정렬하는 데 도움이 되는 여러 레이아웃 컨테이너를 제공합니다. Row 및 Column와 같은 기본 레이아웃 컴포저블은 간단한 정렬을 처리하지만, 많은 앱은 화면 크기가 변경되고 사용자 데이터가 증가함에 따라 더 반응성이 뛰어나고 적응성이 높은 컨테이너 솔루션을 필요로 합니다.
레이아웃 컨테이너에는 다음이 포함됩니다.
- 지연 목록 및 지연 그리드: 현재 표시 영역에 표시되는 항목만 구성하고 배치하여 크거나 동적으로 크기가 지정된 데이터 세트를 효율적으로 표시하는
LazyColumn,LazyRow,LazyVerticalGrid와 같은 구성요소입니다. - 페이저: 사용자가 콘텐츠 페이지 간에 스와이프하거나 스크롤할 수 있는
HorizontalPager및VerticalPager와 같은 컨테이너입니다. - 흐름 레이아웃: 공간이 부족할 때 넘치는 항목을 다음 행이나 열로 자동으로 래핑하는 반응형 1차원 컨테이너(
FlowRow및FlowColumn)입니다. - 그리드: 컨테이너 크기에 맞게 조정되는 다중 열 또는 다중 행 레이아웃으로 항목을 표시하는 유연한 2차원 구조입니다.
- FlexBox: CSS Flexbox에서 영감을 받은 적응형 컨테이너로, 항목이 기본축과 교차축을 따라 줄바꿈, 확장, 축소, 정렬되어 사용 가능한 공간을 채우는 방식을 세부적으로 제어할 수 있습니다.
올바른 레이아웃 컨테이너 선택
Compose에서 레이아웃을 빌드할 때 기본 레이아웃 컨테이너와 고급 레이아웃 컨테이너 중 무엇을 선택할지는 디자인, 공간이 제한될 때 항목을 줄바꿈해야 하는지 여부, 항목의 크기가 동적으로 조절되는 방식에 따라 달라집니다.
다음 표에는 각 Compose 1D 레이아웃 컨테이너의 기능이 요약되어 있습니다.
컨테이너 |
항목을 새 줄로 줄바꿈 |
항목별 증가 |
항목별 축소 |
항목별 시작 크기 |
여러 줄에서 사용 가능한 공간을 채우도록 항목이 늘어남 |
항목 재정렬하기 |
지연 로드 |
권장 용도: |
행 / 열 |
❌ |
✅ ( |
❌ |
❌ |
❌ |
❌ |
❌ |
|
FlowRow / FlowColumn |
✅ |
제한됨 |
❌ |
❌ |
일부 |
❌ |
❌ |
|
LazyRow / LazyColumn |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
✅ |
|
FlexBox |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
❌ |
|
다음 표에는 Grid 및 기타 유사한 컴포저블의 기능이 요약되어 있습니다.
컨테이너 |
엄격한 2D 정렬 |
항목 확장 (열) |
항목 확장 (행) |
지연 로드 |
권장 용도: |
그리드 |
✅ |
✅( |
✅ |
❌ |
|
LazyVerticalGrid |
✅ |
✅( |
❌ |
✅ |
|
LazyStaggeredGrid |
❌ (1D만 해당) |
부분 (전체 기간만) |
❌ |
✅ |
|
LazyHorizontalGrid |
✅ |
❌ |
✅ |
✅ |
|
행과 열 결합하기 |
❌ |
❌ |
❌ |
❌ |
|