Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

유스의 개발 일지

[Android/Kotlin] Compose Layout 본문

Android

[Android/Kotlin] Compose Layout

YusAOS 2024. 11. 8. 18:25

함수 뜯어보고 탐구하기



Layout

UI 요소들을 배치하고 정렬하는 데 필수적인 개념들로 구성됩니다.

View 시스템과의 차이를 보자면, XML View 형태에서는 ConstraintLayout과 같은 특정 뷰를 중첩할 때 몇가지 성능 문제가 발생하는데

 

(자식 뷰들의 상대적 위치를 기준으로 배치합니다. 어떤 뷰가 다른 뷰의 아래에 위치해야 한다면, 이 두 뷰는 상호 의존적인 관계를 갖게 되고 서로 간의 관계를 계산해야 하므로 다른 레이아웃보다 측정 단계가 더 복잡하고 오래 걸리는 단점, 이로써 성능 저하가 발생하게 됩니다.)

 

Compose는 여러 번 측정하는 것을 방지하므로 성능에 영향을 미치지 않고 원하는 만큼 깊이 중첩할 수 있는 장점이 있습니다.

 

Compose의 기본 Layout

  • Column : 세로로 배치
  • Row : 가로로 배치
  • Box : 중첩이 가능하게 배치
@Composable
inline fun Column(
    modifier: Modifier = Modifier,
    verticalArrangement: Arrangement.Vertical = Arrangement.Top,
    horizontalAlignment: Alignment.Horizontal = Alignment.Start,
    content: @Composable ColumnScope.() -> Unit
) {
    val measurePolicy = columnMeasurePolicy(verticalArrangement, horizontalAlignment)
    Layout(
        content = { ColumnScopeInstance.content() },
        measurePolicy = measurePolicy,
        modifier = modifier
    )
}

 

Column은 세로로 배치로

verticalArrangement: Arrangement.Vertical

 

 

해당 속성은 Column 내 자식 요소들의 수직 정렬 방식을 설정하는 속성입니다.

VerticalArrangement를 사용하면 Column 안에 들어가는 여러 요소들의 배치와 간격을 쉽게 제어할 수 있다.

  • Arrangement.Top: 자식 요소들을 위쪽에 정렬합니다.
  • Arrangement.Center: 자식 요소들을 수직 중앙에 정렬합니다.
  • Arrangement.Bottom: 자식 요소들을 아래쪽에 정렬합니다.
  • Arrangement.SpaceBetween: 첫 번째 요소와 마지막 요소는 Column의 위아래 끝에 배치되고, 나머지 요소들은 요소 간의 간격을 일정하게 배치합니다.
  • Arrangement.SpaceAround: 위와 아래의 간격이 다른 요소 간의 간격의 절반이 되도록 설정합니다.
  • Arrangement.SpaceEvenly: 모든 요소 간의 간격이 동일하게 배치됩니다.
horizontalAlignment: Alignment.Horizontal

 

 

해당 속성은 자식 요소들의 수평 위치를 설정할 수 있게 해줍니다.

  • Alignment.Start: Column의 왼쪽(시작 부분)에 자식 요소를 정렬합니다.
  • Alignment.CenterHorizontally: Column의 수평 중앙에 자식 요소를 정렬합니다.
  • Alignment.End: Column의 오른쪽(끝 부분)에 자식 요소를 정렬합니다.

 

Row은 가로로 배치로

horizontalArrangement: Arrangement.Horizontal

 

해당 속성은 Row 컴포저블에서 자식 요소들이 수평으로 어떻게 배치될지를 설정하는 속성입니다.

 

  • Arrangement.Start: 자식 요소들을 Row의 시작(왼쪽) 부분에 배치합니다. 남는 공간은 오른쪽에 위치합니다.
  • Arrangement.Center: 자식 요소들을 Row의 수평 중앙에 배치합니다. 왼쪽과 오른쪽에 동일한 크기의 빈 공간이 생깁니다.
  • Arrangement.End: 자식 요소들을 Row의 끝(오른쪽) 부분에 배치합니다. 남는 공간은 왼쪽에 위치합니다.
  • Arrangement.SpaceBetween: 첫 번째 요소와 마지막 요소는 Row의 양쪽 끝에 배치되며, 나머지 요소들은 균등한 간격으로 배치됩니다.
  • Arrangement.SpaceAround: 첫 번째와 마지막 요소가 왼쪽과 오른쪽에 일정한 여백을 가지고, 각 요소 간의 간격은 그 여백의 두 배가 되도록 배치합니다.
  • Arrangement.SpaceEvenly: 모든 요소 간의 간격을 동일하게 배치합니다. Row의 시작 부분과 끝 부분의 여백도 각 요소 간 간격과 동일합니다.

 

verticalAlignment: Alignment.Vertical

 

해당 속성은 Row 컴포저블에서 자식 요소들이 수으로 어떻게 배치될지를 설정하는 속성입니다.

 

  • Alignment.Top: 자식 요소들을 Row의 위쪽(상단)에 정렬합니다. 모든 자식 요소들이 Row의 상단에 위치하고, 남는 공간은 아래쪽에 있게 됩니다.
  • Alignment.CenterVertically: 자식 요소들을 Row의 수직 중앙에 정렬합니다. 요소들이 수평 라인의 중앙에 위치하며, 위와 아래에 동일한 크기의 빈 공간이 생깁니다.
  • Alignment.Bottom: 자식 요소들을 Row의 아래쪽(하단)에 정렬합니다. 모든 자식 요소들이 Row의 하단에 위치하고, 남는 공간은 위쪽에 있게 됩니다.

Row, Column, Box 모든 Layout에 있는 속성인 Modifier

modifier: Modifier = Modifier,

 

 

 

해당 속성에 있는 다양한 속성들을 다음과 같습니다.

  • 크기 및 배치
    • fillMaxSize(), fillMaxWidth(), fillMaxHeight(): 요소가 부모의 크기를 채우도록 설정합니다.
    • size(): 요소의 고정 크기를 설정합니다.
    • width(), height(), padding(): 요소의 너비, 높이, 그리고 패딩을 설정합니다.
  • 정렬 및 여백
    • padding(): 요소의 내부 여백을 설정합니다.
      ( paddingFrom은 특정 방향에 대한 여백을 설정하는 데 사용됩니다. )
      ( paddingFromBaseline은 텍스트의 기준선을 기준으로 수직 여백을 설정합니다. )
    • offset(): 요소의 위치를 지정한 방향으로 이동합니다.
    • align(), wrapContentSize(): 요소의 정렬 방식을 지정합니다.
  • 배경 및 모양
    • background(): 배경색을 설정합니다.
    • border(): 테두리와 두께, 색상을 지정합니다.
    • clip(): 요소의 모양을 특정 모양으로 자릅니다.
  • 클릭 및 제스처
    • clickable(): 클릭 이벤트를 설정합니다.
    • toggleable(), draggable(), scrollable(): 다양한 제스처와 상호작용을 추가할 수 있습니다.
  • 시각적 효과
    • alpha(): 요소의 투명도를 설정합니다.
    • rotate(): 요소를 회전시킵니다.
    • scale(): 요소의 크기를 배율로 조정합니다.
    • shadow(): 그림자를 설정합니다.

 

Modifier는 Compose에서 UI 요소의 모양과 동작을 유연하게 제어하는 역할을 해줍니다. 여러 설정을 다양한 스타일과 기능을 추가할 수 있으며, 기본적인 배치에서부터 상호작용, 시각적 효과까지 폭넓게 하여 구성할 수 있어서 Layout 구성을 다양하게 표현하는 데에 도움을 줍니다.

 

'Android' 카테고리의 다른 글

[Android/Kotlin] Compose App Bar  (0) 2024.11.10
[Android/Kotlin] Compose Layout(1)  (5) 2024.11.09
[Android/Kotlin] Compose Button  (1) 2024.11.07
[Android/Kotlin] Compose Side-effect  (2) 2024.10.29
[Android/Kotlin] Compose 와 State  (4) 2024.10.23