코틀린 & 컴포즈 & Java/컴포즈 Compose

[Compose] TextField의 여백 문제와 해결 방법

코딩하는후운 2025. 2. 6. 14:39
반응형

TextField의 여백 문제와 해결 방법

Jetpack Compose에서 TextField를 사용할 때, 텍스트가 위쪽으로 쏠리거나 하단에 불필요한 여백이 생기는 경우가 있다. 특히 여러 줄 입력 (multiLine)을 허용할 때 이 현상이 두드러진다.

 

TextField에서 여백이 생기는 이유

1. TextField의 내부 패딩

기본 TextField는 내부적으로 BasicTextField를 래핑하고 있으며, 기본 패딩이 포함되어 있다.
이 때문에 입력 텍스트가 위쪽으로 쏠리거나, 하단에 여백이 남을 수 있다.

2. lineHeight을 조정해도 해결되지 않음

보통 TextStyle에서 lineHeight을 조정하면 텍스트 정렬이 맞을 거라고 생각하지만, 
Compose에서는 Baseline기준으로 텍스트를 정렬하기 때문에 lineHeight만 조정해도 하단 여백이 남을 수 있다.

3. TextField의 높이를 강제 지정하는 경우

modifier.height() 또는 modifier.heightIn()을 사용할 경우, 내부 정렬이 깨지면서 텍스트가 위쪽으로 몰릴 수 있다.

 

해결 방법

wrapContentHeight() 사용

wrapContentHeight()를 사용하면 입력된 텍스트 높이에 맞춰 TextField의 높이가 자동 조정되므로, 위쪽으로 몰리는 문제가 해결된다.

@Composable
fun FixedTextField() {
    var text by remember { mutableStateOf("") }

    BasicTextField(
        value = text,
        onValueChange = { text = it },
        textStyle = TextStyle(
            fontSize = 16.sp,
            lineHeight = 24.sp, // ✅ 줄 간격 조절
            textAlign = TextAlign.Start
        ),
        modifier = Modifier
            .fillMaxWidth()
            .wrapContentHeight() // ✅ 내부 텍스트 높이에 맞춰 조정
            .background(Color.LightGray)
    )
}

 

참조 :

https://proandroiddev.com/the-missing-pieces-of-text-alignment-in-compose-text-50efec9bc387

반응형