기본 개념
Row 컴포저블
Row(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text("왼쪽 텍스트")
Text("오른쪽 텍스트")
}Column 컴포저블
수직 방향으로 Composable 배치
Column(
modifier = Modifier
.fillMaxHeight()
.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(12.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("위쪽 텍스트")
Button(onClick = {}) {
Text("아래 버튼")
}
}
Row와 Column 조합
다단 레이아웃, 폼 구성, 프로필 페이지 등을 만들 때 주로 사용
Row(modifier = Modifier.fillMaxWidth()) {
Column(modifier = Modifier.weight(1f)) {
Text("이름")
Text("이메일")
}
Column(modifier = Modifier.weight(1f)) {
Text("홍길동")
Text("honggildong@email.com")
}
}
Modifier 조합 활용
Row 안에서 Column으로 나누는 구조는 form 화면 제작이나 card 뷰 구현에 자주 사용됨
기본 개념
Box 예제
Box(
modifier = Modifier
.size(200.dp)
.background(Color.Gray),
contentAlignment = Alignment.Center
) {
Icon(Icons.Default.Star, contentDescription = null)
Text("즐겨찾기", modifier = Modifier.align(Alignment.BottomEnd))
}
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1"
ConstraintLayout(modifier = Modifier.fillMaxSize()) {
val (title, button) = createRefs()
Text("안녕하세요", Modifier.constrainAs(title) {
top.linkTo(parent.top, margin = 32.dp)
start.linkTo(parent.start)
})
Button(onClick = {}, Modifier.constrainAs(button) {
top.linkTo(title.bottom, margin = 16.dp)
end.linkTo(parent.end)
}) {
Text("클릭")
}
}
-> createRefs() 여러 참조 객체 생성
-> createGuidelineFromTop(0.5f) 부모 기준 가이드라인 생성
-> createBottomBarrier(...) 요소들의 하단 기준점 생성
UI가 복잡해지는 경우 Row, Column, Box만으로는 한계가 있으므로 ConstraintLayout 사용을 고려해볼 것
기본 개념
IntrinsicSize는 자식 컴포저블의 내용 크기에 따라 부모의 크기를 동적으로 결정 가능
주로 Divider나 비대칭 레이아웃 구성 시 유용
Row(modifier = Modifier.height(IntrinsicSize.Min)) {
Text("짧은 텍스트", modifier = Modifier
.padding(8.dp)
.fillMaxHeight())
Divider(
color = Color.Black,
modifier = Modifier
.width(1.dp)
.fillMaxHeight()
)
Text("길고 긴 텍스트입니다.", modifier = Modifier
.padding(8.dp)
.fillMaxHeight())
}
-> 텍스트 길이에 맞게 세로 구분선을 일치시킬 때 & Row 안의 높이를 자식 크기에 맞추고 싶을 때
- Row / Column
- 수평 / 수직 배치
- 기본 폼, 리스트, 정렬된 텍스트들
- Box
- 겹치기, 자유 배치
- 아이콘+텍스트, 배경 이미지 위 텍스트
- ConstraintLayout
- 복잡한 제약 구조
- 정밀한 레이아웃 설계, 반응형 UI
- IntrinsicSize
- 자식 기반 크기 설정
- 구분선, 내부 길이 정렬 필요 시