ConstrainLayout是一個(gè)允許你用靈活的方法去設(shè)置你控件的位置和大小的ViewGroup嚷节。
優(yōu)點(diǎn)
- 使用根據(jù)靈活泡态,可以一個(gè)布局就完成界面卷谈。不需要像以前那樣,layout嵌套layout。
- 很好的拖拉控件的支持蛀序。但是本文還是介紹代碼的方式。
配置
只要android api超過9,添加依賴蒋譬,就可以使用ConstrainLayout了。
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
一個(gè)簡單的ConstrainLayout布局
我們來看一個(gè)簡單的ConstrainLayout布局愉适。
我們可以看到犯助,現(xiàn)在textview是水平垂直居中的。那都是下面這幾句話的功勞维咸。
app:layout_constraintLeft_toLeftOf="@+id/activity_main"
app:layout_constraintRight_toRightOf="@+id/activity_main"
app:layout_constraintTop_toTopOf="@+id/activity_main"
app:layout_constraintBottom_toBottomOf="@+id/activity_main"
哇剂买,這幾個(gè)屬性看起來很復(fù)雜很麻煩的感覺惠爽。實(shí)際上,都是一樣的套路瞬哼。
我們可以解析一下婚肆。其實(shí)每一句屬性都可以表達(dá)為layout_constraint本控件某一邊緣_to目標(biāo)控件某一邊緣of。
舉個(gè)例子:
app:layout_constraintLeft_toRightOf : 表示的是坐慰,本控件的左邊緣緊緊貼著目標(biāo)控件的右邊緣旬痹。

那其他的都是同理了。
app:layout_constraintRight_toRightOf :本控件右邊緣貼著目標(biāo)控件的右邊緣讨越。
app:layout_constraintTop_toTopOf : 本控件的上邊緣貼著目標(biāo)控件的上邊緣两残。
等等等等。
這是所有可以貼近的邊緣

這是所有的貼近屬性
layout_constraintLeft_toLeftOf
layout_constraintLeft_toRightOf
layout_constraintRight_toLeftOf
layout_constraintRight_toRightOf
layout_constraintTop_toTopOf
layout_constraintTop_toBottomOf
layout_constraintBottom_toTopOf
layout_constraintBottom_toBottomOf
layout_constraintBaseline_toBaselineOf
layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf
而在例子中把跨,我們的textview即貼近了父布局的左邊人弓,又貼近了父布局的右邊,而且着逐,它還是wrap_content的崔赌!不可能被拉長到父布局的寬度啊,于是耸别,在兩邊的拉力平衡下健芭,textview就水平居中了。在preview中的這個(gè)圖可以很形象地表達(dá)出左右兩邊的拉力的平衡了秀姐。
拉力偏重
在上面的例子中慈迈,我們可以看到,textview兩邊的拉力偏重是相等的省有,都是50%痒留。如果我們想要textview向左偏一點(diǎn),那就可以調(diào)節(jié)一下水平的拉力偏重了蠢沿。
app:layout_constraintHorizontal_bias="0.3"
這時(shí)候伸头,左側(cè)的拉力就占了0.3的偏重了。
連接到一個(gè)GONE的控件
有請(qǐng)兩位演員舷蟀,testview tv1和tv2恤磷,我們可以看到,tv2的左邊緣是貼著tv1的右邊緣的野宜。
這時(shí)候我們讓tv1退場扫步,把tv1設(shè)成gone,tv2就只能貼著父布局的邊緣了速缨。
為了應(yīng)對(duì)這種情況锌妻,android提供了goneMargin屬性。我們可以給tv2設(shè)置一下旬牲。
app:layout_goneMarginLeft="20dp"
tv2就會(huì)和父布局的左邊緣隔20dp了仿粹。
constraintL還有很多知識(shí)我沒有學(xué)習(xí)到搁吓,以后開發(fā)中遇到再來填坑。
參考: