溫故而知新茶行,可以為師矣 采郎。
前言
關于ConstraintLayout,官方給出了使用指南文檔使用ConstraintLayout 構建自適應界面倍靡,一直太懶堕澄,不愿動筆膜蛔,下面記錄一下閱讀指南的心得體會瀑志。
一涩搓、創(chuàng)建布局
- 約束:要在 ConstraintLayout 中定義某個視圖的位置污秆,您必須為該視圖添加至少一個水平約束條件和一個垂直約束條件。
- 轉換布局:在 Component Tree 窗口中昧甘,右鍵點擊該布局良拼,然后點擊 Convert layout to ConstraintLayout。
- 創(chuàng)建布局:layout>New>Layout Resource File
- Resource Manager:選擇Layout標簽創(chuàng)建布局
二充边、Relative Positioning 相對定位
屬性 | 含義 |
---|---|
layout_constraintStart_toStartOf | 約束左邊與誰的左邊對齊 |
layout_constraintStart_toEndOf | 約束左邊在誰的右邊 |
layout_constraintEnd_toStartOf | 約束右邊在誰的左邊 |
layout_constraintEnd_toEndOf | 約束右邊與誰對齊 |
layout_constraintTop_toTopOf | 約束頂部與誰對齊 |
layout_constraintTop_toBottomOf | 約束頂部在誰的底部 |
layout_constraintBottom_toTopOf | 約束底部在誰的頂部 |
layout_constraintBottom_toBottomOf | 約束底部與誰對齊 |
layout_constraintBaseline_toBaselineOf | 約束基線與誰對齊 |
- 居中:如果左右都約束庸推,則相對于橫向剩余空間居中顯示
-
基線對齊:基線對齊取下基線對齊,如下圖1所示
layout_constraintBaseline_toBaselineOf 受文字的gravity屬性影響
圖1
三浇冰、Margins 邊距
如果設置了邊距予弧,將邊距強制為目標端與源端之間的空間
邊距 | 設置 |
---|---|
android:layout_marginStart | 左邊距 |
android:layout_marginTop | 上邊距 |
四、Centering positioning and bias 居中偏移
說明:文章中的居中都是廣義的居中湖饱,即在剩余空間中居中
即在剩余空間中按比例顯示
偏移 | 設置 |
---|---|
layout_constraintHorizontal_bias | 水平方向居中時左右邊距的比例:取值范圍是0-1 |
layout_constraintVertical_bias | 垂直方向居中時左右邊距的比例:取值范圍是0-1 |
五、Circle positioning 角度定位
角度定位 | 設置 |
---|---|
app:layout_constraintCircle | 約束以誰為圓點 |
app:layout_constraintCircleRadius | 約束角度的距離 |
app:layout_constraintCircleAngle | 約束的角度 |
六杀捻、目標view被隱藏時井厌,當前view的邊距
邊距 | 設置 |
---|---|
layout_goneMarginStart | 水平方向參照view設置為gone時左邊距,取值dimens |
layout_goneMarginEnd | 水平方向參照view設置為gone時右邊距 |
layout_goneMarginTop | 垂直方向參照view設置為gone時上邊距 |
layout_goneMaginBottom | 垂直方向參照view設置為gone時下邊距 |
七致讥、尺寸
尺寸 | 設置 |
---|---|
app:layout_constraintWidth_min="200dp" | 約束最小寬度 |
layout_constraintVertical_weight | 縱向高度所占的比重 |
layout_constraintHorizontal_weight | 橫向寬度所占的比重 |
layout_constraintDimensionRatio | 寬高的比例仅仆,設置寬/高百分比時,必須將對應的寬 /高設置為 "0dp"垢袱,取值范圍為0-1 |
八墓拜、 鏈
鏈是一組視圖,這些視圖通過雙向位置約束條件相互鏈接到一起请契。鏈中的視圖可以垂直或水平分布咳榜。
鏈可以采用以下幾種樣式之一:
- Spread:視圖是均勻分布的(在考慮外邊距之后)。這是默認值爽锥。
- Spread inside:第一個和最后一個視圖固定在鏈兩端的約束邊界上涌韩,其余視圖均勻分布。
-
Weighted:當鏈設置為 spread 或 spread inside 時氯夷,您可以通過將一個或多個視圖設置為“match constraints”(
0dp
) 來填充剩余空間臣樱。默認情況下,設置為“match constraints”的每個視圖之間的空間均勻分布腮考,但您可以使用layout_constraintHorizontal_weight
和layout_constraintVertical_weight
屬性為每個視圖分配重要性權重雇毫。如果您熟悉線性布局中的layout_weight
的話,就會知道該樣式與它的原理是相同的踩蔚。因此棚放,權重值最高的視圖獲得的空間最大;相同權重的視圖獲得同樣大小的空間寂纪。 - Packed:視圖打包在一起(在考慮外邊距之后)席吴。 然后赌结,您可以通過更改鏈的頭視圖偏差調整整條鏈的偏差(左/右或上/下)。
每種鏈樣式的示例
- 鏈對當前方向上進行了約束孝冒,但對另一個方向無效柬姚,兩個方向約束獨立
- 鏈提供了分組功能,其包含了多個組件庄涡,這些組件共享方向上的空間
鏈 | 設置 |
---|---|
layout_constraintHorizontal_chainStyle | 取值為string |
layout_constraintVertical_chainStyle | 垂直鏈約束的模式量承,取值為Spread、Spread inside穴店、Weighted撕捍、Packed |
九、繪制
ConstraintLayout是按照從上到下一層一層的順序繪制的