천복만복 프로그래밍/천복만복 안드로이드
[Compose] Alignment line
U&MeBlue
2025. 2. 21. 20:59
부모 레이아웃에서 자식 Composable 배치할때 참고 할 수 있도록 자식 Composable 에서 제공하는 가이드라인이라고 볼 수 있음.
- Layout 을 사용하거나 layout modifier 를 이용, layout 과정에서 제공해줄 수 있다.
private val CustomAligmentLine = HorizontalAlignmentLine(merger = { old, new ->
min(old, new)
})
@Composable
private fun SomeComposable(
modifier: Modifier = Modifier,
) {
Layout(
content = {
// ...
},
modifier = modifier
) { mesurables, constraints ->
// ...
layout(
width = calculatedWidth,
height = calculatedHeight,
alignmentLines = mapOf(
CustomAligmentLine to height*(2 / 3) // 이렇게 제공할 수 있다.
)
) {
//...
}
}
}
- HorizontalAligmentLine, VerticalAlignmentLine 을 상속하여 구현할 수 있음.
- 부모 레이아웃 내의 자식 레이아웃에서 AlignmentLine 를 제공할때, 부모 레이아웃도 자식의 Alignment 를 상속받아서 부모의 부모에서 배치될때 가이드로 쓰일 수 있게 된다.
- 부모 레이아웃 내에 여러 자식 레이아웃이 있고, 각 자식 레이아웃에서 동일한 AlignmentLine 을 제공하는 경우 부모가 어떻게 AlignmentLine 을 상속해야 하는지가 결정되어야 한다. 이러한 문제를 AlignmentLine의 merger 가 해결하는 역할을 한다.
- Text 와 같은 Composable 은 FirstBaseLine 이나 LastBaseLine 과 같은 기본 AlignmentLine 을 제공한다.
- RowScope 나 ColumnScope 에서 alignBy 와 같은 Modifier 로 자식 컴포저블들을 정렬할 수 있는데, 이때 자식의 AlignmentLine 를 정렬 기준으로 설정할 수도 있다.
- RowScope 내에서 자식이 alignBy 로 정렬 기준을 설정하는 경우 Row 에 제공했던 VerticalAlignment 옵션은 무시되고 항상 VerticalAlignment.Top 이 적용된다.
참고 자료
https://developer.android.com/develop/ui/compose/layouts/alignment-lines
https://medium.com/@diegop88/alignment-with-jetpack-compose-9b02d819a773
728x90