Android控件之 ConstraintLayout

直接看屬性對應的作用

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)

Google介紹圖片

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)約束會被打破敞映,看下效果:


情況1-button2未相對于父控件右側(cè)對齊
情況1下的效果


情況2-button添加右側(cè)與父控件對齊
情況2的效果

從上面我們看到较曼,這個布局是有問題的,首先第一個右側(cè)超出了父控件范圍振愿,這個跟這里講的其實沒有啥聯(lián)系捷犹,只是也列出來看看,第二種情況就是我們要講的冕末,約束被打破了萍歉,第二個按鈕本來應該是在第一個按鈕的右側(cè)的,而這時候看到档桃,在右側(cè)偏左枪孩,這時候我們就需要上面的屬性了,我們看看設(shè)置完屬性之后的效果:

設(shè)置了強制約束屬性為true

11藻肄、MATCH_CONSTRAINT

使用就是將寬或高設(shè)置成0dp销凑,默認是view占用所有可用空間,下面是一些和他配合使用的屬性:

layout_constraintWidth_minlayout_constraintHeight_min:將設(shè)置此維度的最小大小
layout_constraintWidth_maxlayout_constraintHeight_max:將設(shè)置此維度的最大大小
layout_constraintWidth_percentlayout_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ù)炭菌!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罪佳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子黑低,更是在濱河造成了極大的恐慌赘艳,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克握,死亡現(xiàn)場離奇詭異蕾管,居然都是意外死亡,警方通過查閱死者的電腦和手機菩暗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門掰曾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人停团,你說我怎么就攤上這事旷坦。” “怎么了佑稠?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵秒梅,是天一觀的道長。 經(jīng)常有香客問我舌胶,道長捆蜀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮辆它,結(jié)果婚禮上誊薄,老公的妹妹穿的比我還像新娘。我一直安慰自己娩井,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布似袁。 她就那樣靜靜地躺著洞辣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昙衅。 梳的紋絲不亂的頭發(fā)上扬霜,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音而涉,去河邊找鬼著瓶。 笑死,一個胖子當著我的面吹牛啼县,可吹牛的內(nèi)容都是我干的材原。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼季眷,長吁一口氣:“原來是場噩夢啊……” “哼余蟹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起子刮,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤威酒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挺峡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葵孤,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年橱赠,在試婚紗的時候發(fā)現(xiàn)自己被綠了尤仍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡狭姨,死狀恐怖吓著,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情送挑,我是刑警寧澤绑莺,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站惕耕,受9級特大地震影響纺裁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一欺缘、第九天 我趴在偏房一處隱蔽的房頂上張望栋豫。 院中可真熱鬧,春花似錦谚殊、人聲如沸丧鸯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丛肢。三九已至,卻和暖如春剿干,著一層夾襖步出監(jiān)牢的瞬間蜂怎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工置尔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杠步,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓榜轿,卻偏偏與公主長得像幽歼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谬盐,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容