<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.3" <!-- 수평으로 30% 위치 -->
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.8" <!-- 수직으로 80% 위치 -->
android:background="@android:color/holo_blue_light"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/first_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_background"
app:layout_constraintEnd_toStartOf="@+id/second_button" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/second_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_foreground"
app:layout_constraintStart_toEndOf="@+id/first_button" />
<View
android:id="@+id/viewA"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/viewB"
app:layout_marginEnd="8dp"
app:layout_goneMarginEnd="16dp" <!-- GONE 상태일 때 마진을 다르게 설정 -->
android:background="@android:color/holo_blue_light" />
<View
android:id="@+id/viewB"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@+id/viewA"
app:layout_constraintEnd_toEndOf="parent"
android:background="@android:color/holo_red_light" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintWidth_percent="0.5" <!-- 부모의 50% 너비 -->
app:layout_constraintHeight_percent="0.3" <!-- 부모의 30% 높이 -->
android:background="@android:color/holo_green_light"/>
<androidx.constraintlayout.widget.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintGuide_begin="100dp" <!-- 100dp에서 가이드라인 시작 -->
android:orientation="vertical"/>
<androidx.constraintlayout.widget.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintGuide_percent="0.5" <!-- 부모의 50% 지점에 가이드라인 설정 -->
android:orientation="horizontal"/>
<View
android:id="@+id/center_view"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@android:color/holo_blue_bright"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<View
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@android:color/holo_green_light"
app:layout_constraintCircle="@id/center_view" <!-- 중심 뷰 -->
app:layout_constraintCircleRadius="100dp" <!-- 중심으로부터 100dp 떨어짐 -->
app:layout_constraintCircleAngle="45" <!-- 45도 위치 -->
/>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView 1"/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView 2"
app:layout_constraintBaseline_toBaselineOf="@id/text1"/> <!-- text1 기준선과 정렬 -->
layout_constraintDimensionRatio와 같은 속성은 다양한 제약 조건을 쉽게 처리할 수 있도록 도와줍니다.
이 외에도 비율, 바이어스, 체인, 원형 배치, 가이드라인 등 여러 유용한 속성들이 있으니, 복잡한 레이아웃을 구현할 때 적극적으로 활용하면 좋습니다.
ConstraintLayout을 사용하면 복잡한 UI 레이아웃도 쉽게 구성할 수 있고, 위에서 소개한 다양한 속성을 활용하면 더 유연하고 강력한 디자인을 만들 수 있습니다.