使用ConstraintLayout實作布局有兩種方法.
#1指南
考慮到您需要布置六個視圖,您需要添加兩個垂直指南,其中百分比位置為33%,父寬度為66%.您還需要添加兩個水準指南,其中百分比位置為45%和螢幕高度的90%.然後将您的六個視圖限制為這些指南,如此螢幕截圖所示:
以下是使用指南進行布局建構的XML源代碼:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/view1"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_bright"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_green_dark"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintTop_toTopOf="parent" />
android:id="@+id/view3"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_purple"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintTop_toTopOf="parent" />
android:id="@+id/view4"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_orange_light"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
android:id="@+id/view5"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_red_light"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
android:id="@+id/view6"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_dark"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
android:id="@+id/vertical_guideline_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.33" />
android:id="@+id/vertical_guideline_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.66" />
android:id="@+id/horizontal_guideline_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.45" />
android:id="@+id/horizontal_guideline_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.9" />
#2鍊條重量
鍊是另一種使用百分比值來調整視圖大小的強大方法.您在ConstraintLayout鍊中使用權重值,就像在LinearLayout中使用權重一樣.
這是顯示如何使用帶權重的鍊的XML示例:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/view1"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_bright"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintVertical_chainStyle="spread"
app:layout_constraintVertical_weight="45"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/view2"
app:layout_constraintBottom_toTopOf="@+id/view4" />
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_green_dark"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view1"
app:layout_constraintStart_toEndOf="@+id/view1"
app:layout_constraintEnd_toStartOf="@+id/view3"
app:layout_constraintBottom_toBottomOf="@+id/view1" />
android:id="@+id/view3"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_purple"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view2"
app:layout_constraintStart_toEndOf="@+id/view2"
app:layout_constraintBottom_toBottomOf="@+id/view2"
app:layout_constraintEnd_toEndOf="parent" />
android:id="@+id/view4"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_orange_light"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintVertical_weight="45"
app:layout_constraintTop_toBottomOf="@+id/view1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/view5"
app:layout_constraintBottom_toTopOf="@+id/space" />
android:id="@+id/view5"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_red_light"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view4"
app:layout_constraintStart_toEndOf="@+id/view4"
app:layout_constraintEnd_toStartOf="@+id/view6"
app:layout_constraintBottom_toBottomOf="@+id/view4" />
android:id="@+id/view6"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_dark"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view5"
app:layout_constraintStart_toEndOf="@+id/view5"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/view5" />
android:id="@+id/space"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintVertical_weight="10"
app:layout_constraintTop_toBottomOf="@+id/view4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
上面顯示的兩個示例都會導緻以下結果:
了解更多: