原創(chuàng)文章昙沦,轉(zhuǎn)載請注明出處:http://www.reibang.com/p/6ec3d71eaa5f
Android 開發(fā)中辩块,我們常用的布局就是RelativeLayout ,而ConstraintLayout出現(xiàn)后,按照谷歌官方的看法葱轩,就是要將ConstraintLayout來替代RelativeLayout的屠阻,那么這兩者又有什么區(qū)別呢,有什么優(yōu)劣性呢策菜,這就需要我們動一番腦筋了嚷兔。
RelativeLayout
這里為什么要將RelativeLayout與ConstriantLayout 來進(jìn)行對比呢,將其他的布局來對比呢做入,其他布局的使用范圍都不如RelativeLayout廣冒晰,用的也少,我們只需要對比了竟块,明白了RelativeLayout和ConstraintLayout的區(qū)別壶运,其他的布局相差的并不大。
ConstraintLayout
先短暫回顧一下RelativeLayout:相對布局浪秘,控件的位置是按照相對位置來計算的蒋情,控件之間的位置具有相對對應(yīng)的關(guān)系,是最靈活最常用的布局耸携。
而ConstraintLayout:約束布局棵癣,控件之間、控件與父布局之間具有約束關(guān)系夺衍,控件的位置是按照約束來計算的狈谊,使用ConstraintLayout布局時,也可以添加引導(dǎo)線(Guideline)來輔助布局沟沙,所有的布局可以在如圖所示的界面上通過拖動和調(diào)整來完成河劝,相對于RelativeLayout這一點(diǎn)要方便許多。優(yōu)點(diǎn)1:布局調(diào)整更為方便矛紫,所見即所得
舉個小例子
如圖是簡書APP的界面赎瞎,如果采用RelativeLayout我們要如何布局得到這個界面呢?首先最上面的是AppToolBar颊咬,這個直接在ToolBarLayout中進(jìn)行布局即可务甥。其次下面列表牡辽,有多行,雖然每行的布局是一樣的敞临,內(nèi)容卻不同催享,可以把它統(tǒng)一寫到一個xml中再使用include標(biāo)簽引入,最后在代碼中修改內(nèi)容哟绊,但是這樣就不實(shí)際了因妙,代碼的冗余復(fù)雜度并沒有改善。如果直接在xml 中進(jìn)行布局票髓,那么每一行不同的圖標(biāo)和文字攀涵,在布局的過程中可能會混亂,為了方便對每一行來管理洽沟,就需要嵌套linearLayout以故。還有一種布局的方式就是使用ListView來布局,再使用代碼加載裆操,這種方式應(yīng)該是最優(yōu)的吧怒详。
如果采用ConstraintLayout呢,那些使用代碼的方式都不談踪区,這都是相似的昆烁。而在xml文件中布局呢,就不需要嵌套linearLayout了缎岗,直接添加控件静尼,將控件之間的約束調(diào)整好即可,并且由于ConstraintLayout的特性传泊,我們可以很方便的就將各布局給對齊好鼠渺,如圖所示做了個簡單的示例。
這樣布局以后眷细,控件的位置就能夠?qū)R了拦盹。
優(yōu)點(diǎn)2:布局之間相對位置更好控制
動態(tài)新建布局
上面講的都是在xml代碼中靜態(tài)的對布局進(jìn)行調(diào)整,但是實(shí)際開發(fā)過程中溪椎,動態(tài)的控件也不少見普舆,比如要顯示一個對話框、或者顯示登錄按鈕池磁,甚至是彈出一個讓人深惡痛絕的廣告吧奔害,都需要在代碼中動態(tài)的添加布局,添加布局的基本步驟就是先找到我們要新建布局的view地熄,通常是一個Layout,然后調(diào)用addView方法芯杀,傳入一個新的view端考,就可以將新的view添加到我們的界面中來了雅潭。
光添加view還不足夠,我們還得控制view的位置却特,當(dāng)然這個view的位置通常是在左上角扶供,但是這樣不美觀,不符合我們對界面的要求裂明。
在RelativeLayout中椿浓,我們常用LayoutParams來對新建的控件進(jìn)行控制,尺寸和控件等闽晦,ConstraintLayout也可以使用LayoutParams扳碍,具體的不多說,可參看官網(wǎng)仙蛉。
而ConstraintLayout引入的一個新的類笋敞,ConstraintSet,這個就大有文章了荠瘪,這個類的功能更強(qiáng)夯巷,對控件都可以在代碼中動態(tài)的調(diào)整id,如圖
因為ConstraintLayout這些強(qiáng)大的特性哀墓,使得它的應(yīng)用面很廣趁餐,同時,ConstraintLayout也可以方便的創(chuàng)造出動畫效果篮绰,這個可以參考我的另一篇文章ConstraintLayout基礎(chǔ) 及動態(tài)控件(動畫效果)
由上面這些可以得出ConstraintLayout的優(yōu)點(diǎn)3澎怒,動態(tài)創(chuàng)建布局方便,對控件的控制能力更加強(qiáng)大阶牍,可以實(shí)現(xiàn)動畫效果
性能
過后再更新喷面,性能更好,渲染速度更快走孽。
總結(jié)
綜合上面這些來說惧辈,ConstraintLayout的功能更加強(qiáng)大,使用起來更加方便磕瓷,不論是靜態(tài)布局還是動態(tài)布局都具有良好的支持盒齿,同時可以完成動畫效果,性能上也更加優(yōu)越困食,由此看來边翁,ConstraintLayout完全替代RelativeLayout指日可待。