[Android] Constraint

기능

상대적 포지셔닝


[Android] Constraint 1

보기의 배치 기준은 다음과 같습니다.

  • 텍스트의 경우 기준선을 사용할 수 있습니다.


[Android] Constraint 2

  • 이들left그리고 start의 차이점은 무엇인가요?
    • RTL, LTR


[Android] Constraint 3

ConstraintLayout은 서로 상대적인 뷰를 생성합니다.

  • ConstraintLayout과 같은 뷰 그룹이 다른 뷰 또는 뷰 그룹을 포함하도록 Android 화면이 생성됩니다.
    • 가장 바깥쪽 뷰 그룹을 부모라고 하며 나머지 항목은 ID 값으로 식별됩니다.

보기의 크기


[Android] Constraint 4

  • 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

가장자리

  • 마지는 당신이 아는 것입니다.

사라진 마지


[Android] Constraint 5
Android ConstraintLayout 개념 및 사용법 익히기 – 개발자 자습서(realm.io)

  • 보기 B에는 보기 A와 동일한 제한 사항이 있습니다.
    보기 A가 더 이상 표시되지 않으면 B는 어떻게 됩니까?

정책

[Android] Constraint 6
{“originWidth”:1530,”originHeight”:798,”style”:”alignLeft”,”width”:467,”height”:244,”caption”:”ConstraintLayout으로 반응형 UI 만들기

<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"/>

편견


[Android] Constraint 7

app:layout_constraintHorizontal_bias="0.3"
  • 보기가 왜곡될 수 있습니다.

관계


[Android] Constraint 8

  • 비율을 지정하려면 수량 중 하나를 match_constraint로 지정해야 합니다.

쇠사슬


[Android] Constraint 9

  • 뷰를 상호 참조할 때 체인이 발생합니다.
  • 가장 왼쪽 또는 맨 위 보기는 “헤드” 보기입니다.


[Android] Constraint 10

  • 체인 스타일을 지정할 수 있습니다.

체인을 사용하면 적절한 배치와 정렬이 가능합니다.

머리글 보기에서 일관된 속성(예: 테두리)을 적용할 수도 있습니다.

깊이를 줄이는 것이 좋은 이유

뷰를 그리는 과정


[Android] Constraint 11

Android에서 뷰를 렌더링하는 과정을 살펴보겠습니다.

렌더링 프로세스는 세 단계로 구성됩니다.

  1. 측정하다
    • 뷰 트리를 순회하고 각 뷰 그룹 및 뷰의 크기를 결정합니다.
    • 보기 그룹의 크기가 조정되면 하위 보기도 측정됩니다.
  2. 공들여 나열한 것
    • 측정 단계에서 측정된 크기는 각 보기 그룹에서 자식의 위치를 ​​결정하는 데 사용됩니다.
    • 전환도 이때 발생합니다.
  3. 당기다
    • 뷰 트리의 각 개체는 그리기 명령을 GPU로 보내는 캔버스 개체가 됩니다.
    • 이전 단계에서 얻은 크기와 위치가 포함됩니다.
    • 전환도 이때 발생합니다.

각 단계에는 뷰 트리 순회가 필요합니다.
따라서 더 많은 뷰가 겹치거나 더 많이 겹칠수록 더 많은 시간과 계산 능력이 필요합니다.

Android 앱 레이아웃에서 평면 계층 구조를 유지하면 앱에 대한 빠르고 반응이 빠른 사용자 인터페이스를 만들 수 있습니다.

  • DFS 시간 복잡도 → O(V+E)?

일반적으로 프레임워크는 단일 패스에서 매우 빠릅니다.
공들여 나열한 것 또는 측정 단계를 실행합니다.
그러나 보다 복잡한 레이아웃의 경우 프레임워크는 요소를 최종적으로 배치하기 전에 해결하기 위해 여러 단계가 필요한 계층 구조 부분에 대해 여러 번 반복해야 할 수 있습니다.
레이아웃 및 측정 반복을 여러 번 실행하는 것을 이중 과세라고 합니다.

작성 중

뷰 시스템에서는 플랫 뷰 계층 구조가 중첩된 뷰보다 성능면에서 더 좋기 때문에 크고 복잡한 레이아웃을 만드는 데 권장되는 방법이었습니다.
그러나 이는 깊은 레이아웃 계층 구조를 효율적으로 처리할 수 있는 Compose에서는 문제가 되지 않습니다.
ConstraintLayout

  • 뷰 시스템(xml)에서는 트리 구조로 뷰를 관리했지만 Compose에서는 레이아웃을 평면적으로 관리했기 때문에 성능상의 이점이 사라졌습니다.

성능 및 디스플레이 계층 구조 “http://yoonda.m/Android Developers” Android Developers

ConstraintLayout의 성능 이점 이해