每個(gè)View起碼需要一個(gè)水平約束和一個(gè)垂直約束,沒(méi)有約束View在運(yùn)行的時(shí)候會(huì)顯示在(0, 0)坐標(biāo)(雖然編輯界面顯示的位置是你拖拽的位置)淌山。
使用Autoconnect and infer constraints 特性布局編輯器(Layout Editor)會(huì)自動(dòng)幫你添加約束
布局編輯器中每個(gè)控件會(huì)在四角顯示重設(shè)大小的標(biāo)識(shí)(正方形)号枕,在每條邊中間顯示約束設(shè)置的標(biāo)識(shí)(圓形)
添加約束:點(diǎn)擊約束圓點(diǎn)匿情,拖動(dòng)到錨點(diǎn)上拍谐∮婧牵可用的錨點(diǎn)有:別的View的邊界聚请、布局的邊界荠雕、參考線(guideline)。
約束規(guī)則:
1驶赏、每個(gè)View必須至少有兩個(gè)約束炸卑,一個(gè)水平約束一個(gè)垂直約束
2、約束點(diǎn)只能和同個(gè)平面的錨點(diǎn)之間產(chǎn)生約束煤傍,即View的垂直平面只能與另一個(gè)垂直平面產(chǎn)生約束盖文,基準(zhǔn)線也只能和另一個(gè)基準(zhǔn)線產(chǎn)生約束
3、每個(gè)約束點(diǎn)只能用于一個(gè)約束蚯姆,但是不同的View可以約束到同一個(gè)錨點(diǎn)上取消約束:點(diǎn)擊View上對(duì)應(yīng)約束點(diǎn)五续,或是點(diǎn)擊清除所有約束的按鈕
如果在相反方向上添加了約束后,約束指示線變成像彈簧一樣彎曲的線的話龄恋,通常是因?yàn)閂iew設(shè)置成了 "fixed" 或者 "wrap content"疙驾,這時(shí)View會(huì)在約束范圍居中。如果想拉伸它的尺寸來(lái)適應(yīng)約束范圍郭毕,"把尺寸改為 match constraints"它碎。如果想保持當(dāng)前尺寸不變不讓View居中, 調(diào)整約束偏移显押。
如果想對(duì)齊到一個(gè)View的中間扳肛,則兩邊都添加約束
可以添加水平方向或者垂直方向的參考線,參考線對(duì)App用戶不可見(jiàn)乘碑,參考線相對(duì)布局邊緣的位置可以用 dp 單位或者百分比表示挖息。點(diǎn)擊參考線的圓點(diǎn)切換表示方式,拖拽圓點(diǎn)移動(dòng)參考線位置
調(diào)整約束偏移:在屬性窗口拖動(dòng)偏移滑塊
View有三種尺寸模式
1蝉仇、Wrap Content: 自適應(yīng)內(nèi)容
2旋讹、Match Constraints: View可以在寬度或者高度方向在計(jì)算了邊距后根據(jù)需要進(jìn)行擴(kuò)展來(lái)適應(yīng)約束殖蚕,如果該方向只有一個(gè)約束,View會(huì)適應(yīng)它的內(nèi)容沉迹。這個(gè)模式可以在寬度和高度兩個(gè)方向使用睦疫,同時(shí)你也可以設(shè)置一個(gè)尺寸比例
3、Fixed: 固定大小
點(diǎn)擊圖標(biāo)可以切換這三種模式
- 設(shè)置尺寸比例:只有一個(gè)方向設(shè)置為 Match Constraints 時(shí)鞭呕,點(diǎn)擊 Toggle Aspect Ratio Constraint 開(kāi)關(guān)蛤育,輸入寬高比。如果兩個(gè)方向都設(shè)置為 Match Constraints葫松,則需要選擇一個(gè)方向作為基準(zhǔn)
邊距:在Material Design中邊距的尺寸一般為 8dp 的倍數(shù)
-
用鏈(Chain)控制線性組
一個(gè)鏈允許你使用以下樣式水平或者垂直放置一組View:
1瓦糕、Spread: 均與分布。默認(rèn)模式腋么。
2咕娄、Spread inside: 第一個(gè)和最后一個(gè)附著在其約束上,其余的均與分布珊擂。
3圣勒、Weighted: 當(dāng)鏈設(shè)置為 spread 或 spread inside 模式時(shí),你通過(guò)設(shè)置一個(gè)或多個(gè)View的尺寸為 "match constraints" (0dp) 來(lái)填補(bǔ)剩余的空間摧扇。默認(rèn)模式下圣贸,剩余空間會(huì)在設(shè)置了 "match constraints" 尺寸的View間平均分配,但你可以通過(guò)layout_constraintHorizontal_weight
和layout_constraintVertical_weight
給每個(gè) View 指定不同的重要程度扛稽。 同 linear layout類似吁峻。
4、Packed: View 打包在一起在张,可以給他們整體設(shè)置偏移
Examples of each chain style 快速創(chuàng)建一組 View 的鏈:將它們?nèi)x用含,右擊任一 View 選擇 Center Horizontally 或 Center Vertically 即可分別創(chuàng)建水平方向和垂直方向的鏈
使用鏈的一些考慮事項(xiàng):
1、一個(gè) View 既可以屬于一條水平鏈也可以屬于一條垂直鏈帮匾,可以很輕松的創(chuàng)建靈活的網(wǎng)格布局
2耕餐、一條鏈只有當(dāng)其每個(gè)端點(diǎn)都在同一軸向上約束到別的對(duì)象上的時(shí)候才能正確工作
3、雖然鏈的方向可以是水平或者是垂直辟狈,用它不代表所有的 View 在那個(gè)方向?qū)R。所以確保你引入了別的約束來(lái)為每個(gè) View 取得合適的方向夏跷,例如 alignment constraints哼转。鏈的頭:水平方向第一個(gè)或垂直方向第一個(gè) View
不再支持 MATCH_PARENT
支持 View.GONE,gone 的 View 被認(rèn)為只剩一個(gè)點(diǎn)槽华,且它的 margin 全部失效壹蔓。
layout_goneMargin
可重設(shè)因?yàn)槟硞€(gè) View gone 之后補(bǔ)位的 View 的margin與之前的 View 不同的問(wèn)題