본문 바로가기

Android164

[Android] Compose의 ConstraintLayout ConstraintLayout in ComposeConstraintLayout은 컴포저블(Composable)들을 서로 상대적인 위치에 배치할 수 있게 해주는 레이아웃입니다. 여러 개의 중첩된 Row, Column, Box 또는 커스텀 레이아웃을 사용하는 대신으로 활용할 수 있습니다. 복잡한 정렬이 필요한 큰 레이아웃을 구현할 때 유용합니다. 다음과 같은 상황에서 ConstraintLayout 사용을 고려해보세요:화면에 요소를 배치하기 위해 여러 개의 Column과 Row를 중첩 사용하는 것을 피하고, 코드의 가독성을 높이고자 할 때컴포저블을 다른 컴포저블 기준으로 배치하거나, 가이드라인(guideline), 배리어(barrier), 체인(chain) 등을 기준으로 배치하고자 할 때뷰 시스템(View s.. 2025. 6. 5.
[Android] Compose 레이아웃에서 Intrinsic 측정 Compose 레이아웃에서 Intrinsic 측정Compose에서는 자식 컴포저블을 한 번만 측정해야 한다는 규칙이 있습니다. 자식을 두 번 측정하려고 하면 런타임 예외가 발생합니다.하지만 경우에 따라 자식을 실제로 측정하기 전에 그 크기 정보를 알고 싶을 때가 있습니다.이럴 때 사용하는 것이 Intrinsics입니다.Intrinsics를 사용하면 자식을 아직 측정하지 않은 상태에서 필요한 크기 정보를 미리 쿼리할 수 있습니다. 예를 들어, 특정 컴포저블에 대해 다음과 같은 정보를 요청할 수 있습니다:Modifier.width(IntrinsicSize.Min)→ 콘텐츠를 제대로 표시하기 위해 필요한 최소 너비는 얼마인가?Modifier.width(IntrinsicSize.Max)→ 콘텐츠를 제대로 표시할.. 2025. 6. 2.
[Android] Compose의 정렬선(Alignment lines) Jetpack Compose의 정렬선(Alignment lines)Compose의 레이아웃 모델은 AlignmentLine을 사용하여 사용자 정의 정렬선을 만들 수 있도록 지원합니다. 이러한 정렬선은 부모 레이아웃이 자식들을 정렬하거나 배치할 때 사용할 수 있습니다. 예를 들어, Row는 자식들이 제공하는 커스텀 정렬선을 이용해 자식들을 정렬할 수 있습니다. 특정 AlignmentLine에 대한 값을 레이아웃이 제공하면, 부모는 측정 후 해당 자식의 Placeable 인스턴스를 통해 정렬선 위치 값을 읽을 수 있습니다 (Placeable.get 연산자 사용). 부모는 이렇게 얻은 정렬선의 위치를 기반으로 자식의 배치 위치를 결정할 수 있습니다.일부 Compose 컴포저블은 이미 기본적으로 정렬선을 제공합.. 2025. 6. 2.
[Android] Compose는 왜 View System과 달리 측정을 한번만 할까? View 시스템에서 다중 측정이 필요한 이유안드로이드 View 시스템에서는 부모 ViewGroup이 자식 뷰를 배치하기 위해 크기를 먼저 측정해야 합니다. 그런데 이 과정은 생각보다 단순하지 않습니다. 부모는 자식의 크기를 알아야 하고, 자식은 부모의 크기를 알아야 하는 상황이 발생하기 때문입니다. ViewGroup 입장에서 생기는 문제ViewGroup(예: LinearLayout, RelativeLayout)은 자신의 자식 뷰들을 measure() 메서드를 통해 먼저 측정합니다. 자식의 크기를 알아야 자신이 어떤 크기로 그릴지 결정할 수 있기 때문이죠. 하지만 자식이 이렇게 말할 수 있습니다:“저는 부모가 어떤 크기를 주느냐에 따라 제 크기가 달라져요.” 이런 경우, 부모는 자식에게 다양한 제약 조건을.. 2025. 6. 1.
[Android] Compose의 커스텀 레이아웃 커스텀 레이아웃Compose에서 UI 요소는 컴포저블 함수(composable function)로 표현되며, 이 함수가 호출되면 화면에 렌더링되는 UI 트리의 일부를 생성합니다. 각 UI 요소는 하나의 부모를 가지며, 여러 개의 자식 요소를 가질 수 있습니다. 또한, 각 요소는 부모 내에서 (x, y) 위치와 너비 및 높이로 구성된 크기 정보를 가집니다. 부모 요소는 자식 요소에 대해 제약 조건(constraints)을 정의합니다. 자식 요소는 이 제약 조건 내에서 자신의 크기를 결정해야 하며, 제약 조건은 요소의 최소 및 최대 너비와 높이를 제한하는 역할을 합니다. 만약 어떤 요소가 자식 요소들을 가지고 있다면, 자신의 크기를 결정하기 위해 자식 요소들을 측정할 수도 있습니다.그리고 요소가 자신의 크기.. 2025. 6. 1.
[Android] Compose의 Flow Layout Compose의 Flow 레이아웃FlowRow와 FlowColumn은 Row와 Column과 유사한 컴포저블이지만, 컨테이너의 공간이 부족할 경우 아이템이 다음 줄로 넘어가는 점에서 차이가 있습니다.이로 인해 여러 개의 행(Row)이나 열(Column)이 생성될 수 있습니다.maxItemsInEachRow 또는 maxItemsInEachColumn을 설정하여 한 줄에 들어갈 최대 아이템 수를 제어할 수도 있습니다.이러한 FlowRow와 FlowColumn은 반응형 레이아웃을 구성할 때 유용하게 사용할 수 있습니다.예를 들어 아이템이 너무 커서 한 줄에 다 들어가지 않아도 콘텐츠가 잘리지 않고 자연스럽게 다음 줄로 넘어가며,maxItemsInEach*와 Modifier.weight(weight)를 함께 사.. 2025. 5. 31.