ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. Compose Modifier를 활용한 스타일링 (padding, background 등등)
    안드로이드 학습/Compose 2025. 3. 18. 11:37

    Modifier란 ? 

    > Jetpack Compose 에서 UI 요소의 크기, 레이아웃, 동작, 스타일 등을 변경하는데 사용하는 구성요소.

     

    Modifier의 주요 기능은 5가지 정도로 나눌 수 있다. 

    • 1. 크기 조정
    • 2. 정렬 및 배치
    • 3. 배경 및 스타일링
    • 4. 클릭 이벤트
    • 5. 애니매이션 효과 

     

    1. 크기조절

    • Modifier.width(width: Dp) : 너비를 width.dp로 설정
    • Modifier.height(height: Dp) : 높이를 height.dp로 설정
    • Modifier.fillMaxWidth(fraction: Float = 1f) : 가로 전체 채우기, 기본은 모두 채우는 것(fraction = 1f)이며 전체 대비 채우는 비율을 설정하는 것도 가능
    • Modifier.fillMaxHeight(fraction: Float = 1f) : 세로 전체 채우기, 기본은 모두 채우는 것(fraction = 1f)이며 전체 대비 채우는 비율을 설정하는 것도 가능
    • Modifier.fillMaxSize(fraction: Float = 1f) : 가로, 세로 전체 채우기, 기본은 모두 채우는 것(fraction = 1f)이며 전체 대비 채우는 비율을 설정하는 것도 가능 

    예:

    더보기
    Box(
        modifier = Modifier
            .width(100.dp)
            .height(100.dp)
            .fillMaxWidth()
            .fillMaxHeight(0.2f)
            .fillMaxSize()
            .background(Color.Blue)
            .align(Alignment.TopStart)
    ) {
        Text(
            text = "첫번째 Box 영역",
            fontSize = 12.sp, // 글자 크기
        )
    }
    

     

    2. padding, offset 이용하여 정렬 및 배치

    • padding : 자신을 기준으로 안쪽으로 얼만큼 공간을 비울지 결정. 자식 컴포넌트의 크기에 영향을 끼친다.
    • offset : x, y축으로 얼만큼 이동할지 결정. padding과는 다르게 자식 컴포넌트 크기에 영향이 없다. 

    padding

    • 전체 :  Modifier.padding(all: Dp)
    • 상하좌우: Modifier.padding(start: Dp = 0.dp, top: Dp = 0.dp, end: Dp = 0.dp, bottom: Dp = 0.dp)
    • 수평, 수직 : Modifier.padding(horizontal: Dp = 0.dp, vertical: Dp = 0.dp)

    offset 

    • x, y  : Modifier.offset(x: Dp = 0.dp, y: Dp = 0.dp)

    예: 

    더보기
    Row(
        Modifier
            .width(100.dp)
            .height(100.dp)
            .background(Color.White)
            .padding(30.dp)
            .offset(x = 10.dp, y = 10.dp)
    ) {
        Box(
            Modifier
                .width(50.dp)
                .height(50.dp)
                .background(Color.Blue)
        )
    }

    Margin

    Compose에서 margin을 쓰려고 한다면 Spacer(dp : Dp)을 대신 쓰는 것이 좋아보인다.  Compose 함수 내부에 속성으로 따로 제공되는 margin은 없다. 

    Spacer(modifier = Modifier.height(12.dp)) // 위쪽 마진 효과
    Text(
        text = title, fontSize = 14.sp
    )
    Spacer(modifier = Modifier.height(12.dp)) // 위쪽 마진 효과

     

    Text위와 아래에 Margin을 주기 위해  Spacer를 사용한 코드이다. 

     

    3. Modifier.background 배경 및 스타일링

    • color와 shape를 사용해 배경색과 모양 설정
    • border을 이용한 테두리 추가 

    1) 색상

    modifier = Modifier.background(color = Color.Blue)

     

    2) 모양 

    modifier = Modifier.background(shape = CircleShape)
    • RectangleShape : 사각형
    • RoundedCornerShape : 사격형 + 모서리 부분 둥굴게
    • CircleShape : 원
    • CutCornerShape
    더보기
    Box(
        modifier = Modifier
            .width(100.dp)
            .height(100.dp)
            .background(
                color = Color.Blue,
                shape = CircleShape
            )
    ) {
    
    }

    투명도 설정 background 안에 설정한 color의 색상에 copy라는 메소드를 이용해 지정해주면 된다.

    color = Color.Blue.copy(alpha = 0.5f),

     

    3) border 테두리 추가

     

    border 구성요소

    • width, color, shape
    Column(
        modifier = Modifier
            .border(
                width = 3.dp,
                color = Color.Green,
                shape = RectangleShape
            )
    ) { }

     

    background의 shape와는 다르게 Rectangle은 2가지만 사용하는 것 같다. 

    • RectangleShape
    • CircleShape

    4. 클릭 이벤트 

    clickable의 구성 위 함수를 실행하기 위해서는 기본적인 clickable을 사용한다.

    clickable은 아래와 같이 구성되어 있다.

    더보기
    @Composable
    fun clickGesture() {
        val context = LocalContext.current
        Box(
            modifier = Modifier
                .width(400.dp)
                .height(100.dp)
                .background(Color.Green)
                .clickable { showMessage(context, "클릭") }
                .pointerInput(Unit) {
                    detectTapGestures(
                        onTap = { showMessage(context, "onTap") },
                        onPress = { showMessage(context, "onTap") },
                        onDoubleTap = { showMessage(context, "onDoubleTap") },
                        onLongPress = { showMessage(context, "onLongPress") }
                    )
                }
    
        ) {
            Text(text = "클")
        }
    }

     

    클릭 이벤트에는 기본적으로 Ripple Effect라고 해서 물결 효과가 적용되어 있다.

    '안드로이드 학습 > Compose' 카테고리의 다른 글

    (기초) 1-1. Jetpack Compose : 기존 View 시스템과의 차이  (0) 2025.09.09
    5. Compose와 MVVM  (0) 2025.04.01
    4. Compose Side Effect  (0) 2025.03.27
    Compose 학습 이정표  (0) 2025.03.16
    Compose 학습 - 1 : 기초  (0) 2025.02.05
Designed by Tistory.