Layout in Jetpack Compose
on Android, Compose
Last modified at:
Composable
Composable
은 UI의 일부를 설명하는 Unit
을 반환하는 함수이다. 함수 내부에 다른 Composable을 넣어 화면에 표시할 내용을 만들 수 있다.
Composable은 여러 UI 요소를 넣을 수 있지만 개발자가 UI 요소를 정렬하는 가이드를 제공해야 원하는 대로 배치할 수 있다.
@Composable
fun ArtistCard() {
Text("Alfred Sisley")
Text("3 minutes ago")
}
기본 제공 레이아웃 구성요소
위와 같은 문제를 해결하기 위해 Compose는 미리 제공하고 있는 레이아웃 컬렉션을 제공하고 있다.
Column
UI 요소를 세로로 배치한다.
@Composable
fun ArtistCard() {
Column {
Text("Alfred Sisley")
Text("3 minutes ago")
}
}
Row
UI 요소를 가로로 배치한다.
@Composable
fun ArtistCard(artist: Artist) {
Row(verticalAlignment = Alignment.CenterVertically) {
Image(/*...*/)
Column {
Text(artist.name)
Text(artist.lastSeenOnline)
}
}
}
Box
Box를 이용하여 한 요소를 다른 요소 위에 배치한다.
@Composable
fun ArtistCard() {
Box {
Text("Alfred Sisley")
Text("3 minutes ago")
}
}
Modifier
Modifier 를 이용하여 Composable을 장식할 수 있다. Modifier를 통해 할 수 있는 일은 다음과 같다.
- Composable의 크기, 레이아웃, 동작, 모양 변경
- 접근성 라벨 등의 정보 추가
- 사용자 입력 처리
- 요소를 클릭/드래그/스크롤/확대축소 등의 고수준 상호작용 추가
Modifier
는interface
이면서companion object
이다.@Composable fun ArtistCard( artist: Artist, onClick: () -> Unit ) { val padding = 16.dp Column( Modifier .clickable(onClick = onClick) // 해당 컴포저블에 클릭 이벤트 추가 .padding(padding) // 패딩 추가 .fillMaxWidth() // 가로 길이 채우기 ) { Row(verticalAlignment = Alignment.CenterVertically) { /*...*/ } Spacer(Modifier.size(padding)) Card(elevation = 4.dp) { /*...*/ } } }
Modifier
는 연쇄 호출이 가능하며 순서를 가린다.Modifier 호출 순서
Modifier
는 순서에 따라 그 결과가 달라질 수 있다.@Composable fun ArtistCard(/*...*/) { val padding = 16.dp Column( Modifier .clickable(onClick = onClick) .padding(padding) .fillMaxWidth() ) { // rest of the implementation } }
@Composable
fun ArtistCard(/*...*/) {
val padding = 16.dp
Column(
Modifier
.padding(padding)
.clickable(onClick = onClick)
.fillMaxWidth()
) {
// rest of the implementation
}
}