A Simple Box Layout Example
여기 MainActivity.kt에서 BoxExample0라는 composable function을 만들었습니다. 그리고 거기에 간단한 Box를 추가했습니다.
그런 다음 onCreate()의 setContect 블록에서 해당 함수를 호출했습니다.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
BoxExample0()
}
}
}
@Composable
fun BoxExample0() {
Box(
modifier = Modifier
.background(color = Color.Blue)
.size(150.dp, 200.dp)
)
}
위의 코드는 width = 150.dp, height = 200.dp 이고 blue color box를 그리는 코드입니다.
Child Elements of a Box Layout
다음으로 해당 Box에 두개의 자식 요소를 추가합니다. (또 다른 작은 Box와 Text)
@Composable
fun BoxExample0() {
Box(
modifier = Modifier
.background(color = Color.Blue)
.size(150.dp, 200.dp)
) {
Box(
modifier = Modifier
.background(color = Color.Green)
.size(100.dp, 100.dp)
){
}
Text(
text = "Hello",
style = MaterialTheme.typography.h5,
modifier = Modifier
.background(color = Color.White)
.size(70.dp, 50.dp)
)
}
}
지금 이 프로젝트를 실행하면 자식 요소가 서로의 위에 쌓인 것을 볼 수 있습니다.
첫 번째 Box 안에 Box와 동일한 Layer상에 Text를 정의하였습니다.
Alignments를 사용하여 부모 상자 레이아웃의 다른 위치에 자식 요소를 배치할 수 있습니다.
여기에서 더 작은 상자에 대해 .align(Alignment.TopEnd)을 사용하여 TopEnd에 align을 하고 .align(Alignment.BottomCenter)를 사용하여 BottomCenter에 align을 하였습니다.
@Composable
fun BoxExample0() {
Box(
modifier = Modifier
.background(color = Color.Blue)
.size(150.dp, 200.dp)
) {
Box(
modifier = Modifier
.background(color = Color.Green)
.size(100.dp, 100.dp)
.align(Alignment.TopEnd)
){
}
Text(
text = "Hello",
style = MaterialTheme.typography.h5,
modifier = Modifier
.background(color = Color.White)
.size(70.dp, 50.dp)
.align(Alignment.BottomCenter)
)
}
}
위의 코드는 아래 결과를 제공합니다.
Green box가 TopEnd로 Align이 되어있고 Text는 파란 Box안에서 BottomCenter에 위치한 것을 알 수 있습니다.
Alignments of Child Elements of a Box.
box layout의 자식 요소는 9가지 다른 alignment를 가질 수 있습니다.
아래 composable function은 이를 보여주기 위해 만들어 졌습니다.
@Composable
fun BoxExample2() {
Box(
modifier = Modifier
.background(color = Color.LightGray)
.fillMaxSize()
) {
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.TopStart),
text = "TopStart"
)
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.TopCenter),
text = "TopCenter"
)
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.TopEnd),
text = "TopEnd"
)
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.CenterStart),
text = "CenterStart"
)
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.Center),
text = "Center"
)
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.CenterEnd),
text = "CenterEnd"
)
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.BottomStart),
text = "BottomStart"
)
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.BottomCenter),
text = "BottomCenter"
)
Text(
style = MaterialTheme.typography.h6,
modifier = Modifier
.background(Color.White)
.padding(10.dp)
.align(Alignment.BottomEnd),
text = "BottomEnd"
)
}
}
9가지 alignment가 모두 구현되어 있습니다.
Box Layout Code Example
다음은 Box의 실용적인 응용프로그램 입니다.
이 코드 샘플에서는 Box를 사용하여 이미지에 Text와 Button을 배치했습니다.
@Composable
fun BoxExample3() {
Box() {
Image(
painter = painterResource(id = R.drawable.cat),
contentDescription = "cat"
)
Text(
text = "Cat",
style = MaterialTheme.typography.h4,
color = Color.Black,
modifier = Modifier
.align(Alignment.BottomStart)
)
Button(
onClick = {},
colors = ButtonDefaults.textButtonColors(
backgroundColor = Color.White,
contentColor = Color.DarkGray
),
modifier = Modifier
.align(Alignment.TopEnd)
.padding(10.dp)
.border(5.dp, Color.DarkGray, RectangleShape)
) {
Text("Feed To Cat")
}
}
}
Box안에 Image()를 호출하여 그림을 넣을 수 있습니다. painter = painterResource(id = R.drawable.cat)을 통해 이미지를 넣습니다.
Button도 넣을 수 있는데 여기서는 TopEnd에 집어넣고 border는 5.dp, DarkGray의 RectangleShape를 만듭니다. Button 주변에 검은색 border가 있는 것을 볼 수 있습니다.
이 것으로 Box Layout에 대한 설명을 마치겠습니다.
https://appdevnotes.com/box-layout-in-jetpack-compose/
'Android > Jetpack Compose Concepts' 카테고리의 다른 글
JETPACK COMPOSE: OutlinedTextField, FilledTextField에 대해 알아보자 (0) | 2022.01.26 |
---|---|
JETPACK COMPOSE: Border에 대해 알아보자 (0) | 2022.01.23 |
JETPACK COMPOSE: Jetpack Alpha for Glance Widgets (0) | 2022.01.21 |
JETPACK COMPOSE: Column에 대해 알아보자 (0) | 2022.01.13 |
JETPACK COMPOSE: CARD에 대해 알아보자 (0) | 2022.01.11 |
댓글