본문 바로가기
카테고리 없음

Jetpack Compose Box 위젯: 다양한 UI 요소들을 겹쳐서 배치하는 방법

by h4r3 2025. 1. 19.
반응형

Jetpack Compose에서 Box 위젯은 여러 UI 요소들을 겹쳐서 배치할 수 있는 유용한 컴포저블입니다. Box 위젯은 정렬, 오버레이, 배경 설정 등 다양한 방식으로 UI 레이아웃을 만들 때 매우 유용하게 사용됩니다. 이번 글에서는 Box 위젯의 개념과 사용법, 다양한 활용 예시를 소개하겠습니다.


1. Jetpack Compose Box 위젯이란?

Box는 Jetpack Compose에서 제공하는 레이아웃 컴포저블 중 하나로, 주로 UI 요소들을 겹쳐서 배치할 때 사용됩니다. Box는 배경 이미지, 오버레이, 정렬된 텍스트 등 여러 개의 요소를 중첩하여 배치할 수 있는 기능을 제공합니다. Box는 다른 레이아웃 컴포저블인 Column이나 Row와는 달리, 자식 요소들이 겹쳐서 배치되는 특징을 가집니다.

Box 위젯의 주요 특징:

  • 겹치기: 여러 UI 요소들을 겹쳐서 배치할 수 있음
  • 정렬: 자식 컴포저블들의 위치를 자유롭게 조정 가능
  • 레이아웃 간소화: 복잡한 UI 레이아웃을 간단하게 만들 수 있음

2. Box 위젯 사용법

Box 위젯은 자식 요소들을 Stack처럼 겹쳐서 배치할 수 있게 해주며, 각 자식 요소는 Alignment 속성을 통해 위치를 지정할 수 있습니다. 기본적으로 Box는 상위하위 요소를 포함하며, 하위 요소들은 위에 겹쳐서 배치됩니다.

Box 기본 사용 예시

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp

@Composable
fun SimpleBoxExample() {
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(Color.LightGray)
    ) {
        // 첫 번째 자식: 중앙에 배치된 텍스트
        Text(
            text = "Hello, Compose!",
            modifier = Modifier.align(Alignment.Center)
        )

        // 두 번째 자식: 왼쪽 상단에 배치된 버튼
        Button(
            onClick = {},
            modifier = Modifier.align(Alignment.TopStart)
        ) {
            Text("Click Me")
        }
    }
}

@Preview
@Composable
fun PreviewSimpleBoxExample() {
    SimpleBoxExample()
}

이 예제에서 Box는 두 개의 자식 요소를 겹쳐서 배치합니다. 하나는 화면 중앙에 텍스트를 배치하고, 다른 하나는 버튼을 왼쪽 상단에 배치하는 예시입니다. **Modifier.align()**을 사용하여 각 요소를 정렬합니다.


3. Box 위젯 활용 예시

Box 위젯은 여러 가지 상황에서 유용하게 사용될 수 있습니다. 아래는 배경 이미지, 오버레이, 아이콘 등을 사용한 예시입니다.

(1) 배경 이미지와 텍스트 겹치기

@Composable
fun BackgroundImageWithText() {
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(Color.Gray)  // 임시 배경 색상
    ) {
        // 배경 이미지
        Image(
            painter = painterResource(id = R.drawable.bg_image),
            contentDescription = "Background Image",
            modifier = Modifier.fillMaxSize()
        )

        // 텍스트: 중앙에 배치
        Text(
            text = "Welcome to Compose!",
            modifier = Modifier.align(Alignment.Center),
            color = Color.White,
            style = MaterialTheme.typography.h4
        )
    }
}

이 예제에서는 배경 이미지텍스트를 겹쳐서 배치하는 방식입니다. **Modifier.fillMaxSize()**를 사용하여 이미지를 화면 전체 크기로 설정하고, 텍스트는 화면 중앙에 배치합니다.

(2) 오버레이 효과 적용

@Composable
fun OverlayEffectExample() {
    Box(
        modifier = Modifier
            .size(200.dp)
            .background(Color.LightGray)
    ) {
        // 하단에 배경색
        Box(
            modifier = Modifier
                .fillMaxSize()
                .background(Color.Blue.copy(alpha = 0.6f))
        )

        // 상단에 텍스트
        Text(
            text = "Overlay Example",
            modifier = Modifier.align(Alignment.Center),
            color = Color.White,
            style = MaterialTheme.typography.h5
        )
    }
}

이 예제에서는 배경에 반투명 블루 오버레이를 적용하여 텍스트와 겹치도록 설정했습니다. alpha 속성을 사용해 오버레이의 투명도를 조절합니다.


4. Box 위젯의 장점과 사용 시 주의사항

Box 위젯의 장점

  • 다양한 정렬 방식: 자식 요소들을 다양한 방식으로 정렬하고 겹칠 수 있어 레이아웃 설계가 간편합니다.
  • 간단한 UI 구성: 여러 UI 요소들을 겹쳐서 한 화면에서 간단하게 레이아웃을 구성할 수 있습니다.
  • 배경과 오버레이 효과: 배경 이미지와 텍스트, 아이콘 등을 겹쳐서 다양한 효과를 손쉽게 적용할 수 있습니다.

사용 시 주의사항

  • 복잡한 레이아웃은 피하자: Box는 여러 요소를 겹칠 수 있지만, 복잡한 레이아웃을 구현할 때는 Column, Row 등을 고려하는 것이 더 효율적일 수 있습니다.
  • 성능 고려: 여러 개의 겹쳐진 UI 요소를 사용하는 경우 성능에 영향을 줄 수 있으므로, 필요하지 않은 경우 과도한 사용을 피하는 것이 좋습니다.

6. 결론

Box 위젯은 Jetpack Compose에서 여러 UI 요소들을 겹쳐서 배치할 수 있는 강력한 도구입니다. 텍스트, 이미지, 버튼 등 다양한 UI 요소를 중첩하여 배치하고, 정렬을 자유롭게 설정할 수 있어 UI 디자인에 유용하게 사용됩니다.

 

반응형