기능
상대적 포지셔닝
보기의 배치 기준은 다음과 같습니다.
- 텍스트의 경우 기준선을 사용할 수 있습니다.
- 이들left그리고 start의 차이점은 무엇인가요?
- RTL, LTR
ConstraintLayout은 서로 상대적인 뷰를 생성합니다.
- ConstraintLayout과 같은 뷰 그룹이 다른 뷰 또는 뷰 그룹을 포함하도록 Android 화면이 생성됩니다.
- 가장 바깥쪽 뷰 그룹을 부모라고 하며 나머지 항목은 ID 값으로 식별됩니다.
- 가장 바깥쪽 뷰 그룹을 부모라고 하며 나머지 항목은 ID 값으로 식별됩니다.
보기의 크기
- wrap_content
- match_constraint(0dp)
- 사이징
배치 방법
- layout_constraintLeft_toLeftOf
- layout_constraintLeft_toRightOf
- layout_constraintRight_toLeftOf
- layout_constraintRight_toRightOf
- layout_constraintTop_toTopOf
- layout_constraintTop_toBottomOf
- layout_constraintBottom_toTopOf
- layout_constraintBottom_toBottomOf
- layout_constraintBaseline_toBaselineOf
- layout_constraintStart_toEndOf
- layout_constraintStart_toStartOf
- layout_constraintEnd_toStartOf
- layout_constraintEnd_toEndOf
가장자리
- 마지는 당신이 아는 것입니다.
사라진 마지
- 보기 B에는 보기 A와 동일한 제한 사항이 있습니다.
보기 A가 더 이상 표시되지 않으면 B는 어떻게 됩니까?
정책
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.55"/>
편견
app:layout_constraintHorizontal_bias="0.3"
- 보기가 왜곡될 수 있습니다.
관계
- 비율을 지정하려면 수량 중 하나를 match_constraint로 지정해야 합니다.
쇠사슬
- 뷰를 상호 참조할 때 체인이 발생합니다.
- 가장 왼쪽 또는 맨 위 보기는 “헤드” 보기입니다.
- 체인 스타일을 지정할 수 있습니다.
체인을 사용하면 적절한 배치와 정렬이 가능합니다.
머리글 보기에서 일관된 속성(예: 테두리)을 적용할 수도 있습니다.
깊이를 줄이는 것이 좋은 이유
뷰를 그리는 과정
Android에서 뷰를 렌더링하는 과정을 살펴보겠습니다.
렌더링 프로세스는 세 단계로 구성됩니다.
- 측정하다
- 뷰 트리를 순회하고 각 뷰 그룹 및 뷰의 크기를 결정합니다.
- 보기 그룹의 크기가 조정되면 하위 보기도 측정됩니다.
- 뷰 트리를 순회하고 각 뷰 그룹 및 뷰의 크기를 결정합니다.
- 공들여 나열한 것
- 측정 단계에서 측정된 크기는 각 보기 그룹에서 자식의 위치를 결정하는 데 사용됩니다.
- 전환도 이때 발생합니다.
- 측정 단계에서 측정된 크기는 각 보기 그룹에서 자식의 위치를 결정하는 데 사용됩니다.
- 당기다
- 뷰 트리의 각 개체는 그리기 명령을 GPU로 보내는 캔버스 개체가 됩니다.
- 이전 단계에서 얻은 크기와 위치가 포함됩니다.
- 전환도 이때 발생합니다.
- 뷰 트리의 각 개체는 그리기 명령을 GPU로 보내는 캔버스 개체가 됩니다.
각 단계에는 뷰 트리 순회가 필요합니다.
따라서 더 많은 뷰가 겹치거나 더 많이 겹칠수록 더 많은 시간과 계산 능력이 필요합니다.
Android 앱 레이아웃에서 평면 계층 구조를 유지하면 앱에 대한 빠르고 반응이 빠른 사용자 인터페이스를 만들 수 있습니다.
- DFS 시간 복잡도 → O(V+E)?
일반적으로 프레임워크는 단일 패스에서 매우 빠릅니다.
공들여 나열한 것 또는 측정 단계를 실행합니다.
그러나 보다 복잡한 레이아웃의 경우 프레임워크는 요소를 최종적으로 배치하기 전에 해결하기 위해 여러 단계가 필요한 계층 구조 부분에 대해 여러 번 반복해야 할 수 있습니다.
레이아웃 및 측정 반복을 여러 번 실행하는 것을 이중 과세라고 합니다.
작성 중
뷰 시스템에서는 플랫 뷰 계층 구조가 중첩된 뷰보다 성능면에서 더 좋기 때문에 크고 복잡한 레이아웃을 만드는 데 권장되는 방법이었습니다.
그러나 이는 깊은 레이아웃 계층 구조를 효율적으로 처리할 수 있는 Compose에서는 문제가 되지 않습니다.
ConstraintLayout
- 뷰 시스템(xml)에서는 트리 구조로 뷰를 관리했지만 Compose에서는 레이아웃을 평면적으로 관리했기 때문에 성능상의 이점이 사라졌습니다.
성능 및 디스플레이 계층 구조 “http://yoonda.m/Android Developers” Android Developers