直接看屬性對應的作用
1项棠、同級約束屬性(屬性值為對方id)
layout_constraintLeft_toLeftOf 我的左側(cè)與你的左側(cè)對齊
layout_constraintLeft_toRightOf? 我的左側(cè)與你的右側(cè)對齊
layout_constraintRight_toLeftOf? 我的右側(cè)與你的左側(cè)對齊
layout_constraintRight_toRightOf? 我的右側(cè)與你的右側(cè)對齊
layout_constraintTop_toTopOf? 我的頂部與你的頂部對齊
layout_constraintTop_toBottomOf??我的頂部與你的底部對齊 (相當于我在你下面)
layout_constraintBottom_toTopOf? 我的底部與你的頂部對齊(相當于我在你的上面)
layout_constraintBottom_toBottomOf 我的底部與你的底部對齊
layout_constraintBaseline_toBaselineOf 基線對齊
layout_constraintStart_toEndOf 我的左側(cè)與你的右側(cè)對齊
layout_constraintStart_toStartOf 我的左側(cè)與你的左側(cè)對齊
layout_constraintEnd_toStartOf 我的右側(cè)與你的左側(cè)對齊
layout_constraintEnd_toEndOf 我的右側(cè)與你的右側(cè)對齊
2、與父控件約束(屬性值為“parent”)
app:layout_constraintBottom_toBottomOf="parent" 我的底部與父親底部對齊
app:layout_constraintTop_toTopOf="parent" 我的頂部與父親的頂部對齊
app:layout_constraintLeft_toLeftOf="parent" 我的左側(cè)與父親的左側(cè)對齊
app:layout_constraintRight_toRightOf="parent" 我的右側(cè)與父親的右側(cè)對齊
3已亥、居中對齊方式
劇中對齊是由2個對齊方式共同約束達到的作用
水平居中
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
垂直居中
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
完全居中
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
4魔吐、邊距
與普通的布局邊距一樣
android:layout_marginStart
android:layout_marginEnd
android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom
5毡熏、Bias約束
上面說過的居中模式瑰谜,與父控件左邊對齊和父控件右邊對齊達到水平居中效果锌历,這時候就相當于一個東西被2根相同的彈簧從水平倆側(cè)拉著達到居中趟卸,而bias就是控制這個彈簧的彈力達到居中之后再進行水平偏移寞肖。
layout_constraintHorizontal_bias 水平約束力
layout_constraintVertical_bias? 垂直約束力
取值范圍不知道,嘗試了 0 對應最左邊衰腌,1對應最右邊新蟆,0.5對應居中,0~0.5之間在左側(cè)到中心之間右蕊,0.5~1在中心與右側(cè)之間琼稻,而小于0時無效果,大于1時饶囚,比如1.1帕翻,1.2等值時會將控件一部分拉扯出界面,超過一定的數(shù)之后控件不可見萝风。嘀掸。。這個取值具體原理有待閱讀源碼再討論规惰。
6睬塌、圓形定位(Circular positioning)
這個含義講的是一個view從距離和角度相對于另一個view的位置
屬性組
layout_constraintCircle :引用另一個小部件ID
layout_constraintCircleRadius :到其他小部件中心的距離
layout_constraintCircleAngle :小部件應該處于哪個角度(以度為單位,從0到360)
7歇万、可見性Visibility
android:visibility="gone"
這個相對于我們以前的概念揩晴,用法是一樣的,只是含義上有些不同了贪磺,以前2個view相互依賴硫兰,被依賴的那個控件設(shè)置為gone時,我們會發(fā)現(xiàn)寒锚,依賴的那個view就會失去所有相對屬性劫映。
而現(xiàn)在,如果一個控件設(shè)置成了gone刹前,那么他并不是從屏幕中消失了泳赋,而是變?yōu)榱艘粋€不可見的點,并且他的margin腮郊,padding屬性都消失了摹蘑,這時候依賴他的那個view筹燕,依然會存在原有的依賴轧飞。
8衅鹿、尺寸限制(Dimensions constraints?)
android:minWidth 設(shè)置布局的最小寬度
android:minHeight 設(shè)置布局的最小高度
android:maxWidth 設(shè)置布局的最大寬度
android:maxHeight 設(shè)置布局的最大高度
這些屬性只有在設(shè)置寬度或者高度為wrap_content時有效果。
9过咬、寬高約束(Widgets dimension constraints)
這個講的是我們設(shè)置控件的寬高屬性
android:layout_width
android:layout_height
但是它相對于以前有個不同就是多了個 0dp大渤,以前的除了線性布局中設(shè)置了權(quán)重的時候能設(shè)置0dp,其他地方設(shè)置0dp會報錯掸绞。
含義如下:
wrap_content View計算自己的大小
match_parent View填充父布局
0dp 相當于MATCH_CONSTRAINT(后面會單獨講)泵三,簡單理解為占用父控件剩余空間
10、強制約束
app:layout_constrainedWidth=”true|false”
app:layout_constrainedHeight=”true|false”
當view設(shè)置成wrap_content的情況下有效果
這個是什么意思呢衔掸?在我們2個view進行約束的情況下烫幕,如果一個view出現(xiàn)過長的內(nèi)容,這時候我們會發(fā)現(xiàn)約束會被打破敞映,看下效果:
從上面我們看到较曼,這個布局是有問題的,首先第一個右側(cè)超出了父控件范圍振愿,這個跟這里講的其實沒有啥聯(lián)系捷犹,只是也列出來看看,第二種情況就是我們要講的冕末,約束被打破了萍歉,第二個按鈕本來應該是在第一個按鈕的右側(cè)的,而這時候看到档桃,在右側(cè)偏左枪孩,這時候我們就需要上面的屬性了,我們看看設(shè)置完屬性之后的效果:
11藻肄、MATCH_CONSTRAINT
使用就是將寬或高設(shè)置成0dp销凑,默認是view占用所有可用空間,下面是一些和他配合使用的屬性:
layout_constraintWidth_min和layout_constraintHeight_min:將設(shè)置此維度的最小大小
layout_constraintWidth_max和layout_constraintHeight_max:將設(shè)置此維度的最大大小
layout_constraintWidth_percent和layout_constraintHeight_percent:將此維度的大小設(shè)置為父級的百分比(0~1之間)
這個含義其實就是設(shè)置以什么樣的方式占用父控件剩余空間
12仅炊、按比例設(shè)置寬高(Ratio)
app:layout_constraintDimensionRatio="16:9" 按這個比例設(shè)置寬高比
要求寬高至少一個設(shè)置為 0dp(即MATCH_CONSTRAINT)
取值浮點值 表示寬度和高度之間的比率
取值“寬度:高度” 表示寬高比
如果寬高都設(shè)置我為0dp斗幼,也可以使用比率。在這種情況下抚垄,系統(tǒng)設(shè)置滿足所有約束的最大尺寸并保持指定的縱橫比蜕窿。要根據(jù)另一個特定邊的尺寸限制一個特定邊,可以預先附加W,“或” H,分別約束寬度或高度呆馁。例如桐经,如果一個尺寸受兩個目標約束(例如,寬度為0dp且以父節(jié)點為中心)浙滤,則可以指示應該約束哪一邊阴挣,通過 在比率前添加字母W(用于約束寬度)或H(用于約束高度),用逗號分隔開:
app:layout_constraintDimensionRatio="H,16:9"
含義其實就是纺腊,在滿足寬度約束之后畔咧,根據(jù)寬度和比例設(shè)置高度的結(jié)果茎芭。
13、Chains(鏈)
layout_constraintHorizontal_chainStyle
layout_constraintVertical_chainStyle
取值
CHAIN_SPREAD - 元素將展開(默認樣式)
加權(quán)鏈接CHAIN_SPREAD模式誓沸,如果設(shè)置了一些小部件MATCH_CONSTRAINT梅桩,它們將分割可用空間
CHAIN_SPREAD_INSIDE - 類似,但鏈的端點不會分散
CHAIN_PACKED - 鏈條的元素將被包裝在一起拜隧。然后宿百,子項的水平或垂直偏差屬性將影響打包元素的定位
14、虛擬視圖
Guideline
Barrier
Group
所謂虛視圖就是布局中輔助我們進行布局洪添,但是實際上他是不會顯示出來的垦页。
什么是虛視圖呢?其實我們可用看看他的源碼實現(xiàn):
我們看到Guideline其實是一個普通的View,然后在構(gòu)造函數(shù)里將自己設(shè)置為GONE
并且setVisibility()為空方法,該View就永遠為GONE了.
draw()方法為空,意思是不用去繪畫.
onMeasure()中將自己長寬設(shè)置成0.
Guideline就是一個不可見的且不用測量,不用繪制,那么我們就可以忽略其繪制消耗.
其他2個虛視圖也類似干奢。
15外臂、Optimizer優(yōu)化
ConstraintLayout 的屬性
app:layout_optimizationLevel="standard|dimensions|chains"
取值:
none:不優(yōu)化
standard:默認,僅優(yōu)化直接和障礙約束
direct:優(yōu)化直接約束
barrier:優(yōu)化障礙約束
chain:優(yōu)化鏈條約束
dimensions: 優(yōu)化維度測量,減少匹配約束元素的度量數(shù)量
寫得不好的地方多多海涵律胀,有錯誤的地方歡迎留言區(qū)交流指正宋光!
借鑒文章:http://www.reibang.com/p/ddc16a37dfa9
編程不僅是一門技術(shù)!
編程更加是一門藝術(shù)炭菌!