1. 程式人生 > >新佈局ConstrainLayout屬性總結

新佈局ConstrainLayout屬性總結

ConstrainLayout 是Google在AndroidStudio2.2中釋出的一個新佈局,該佈局與Relative相似,但是還是有一些不同。藉助ConstrainLayout我們對複雜的佈局實現0巢狀,而這一點在以往的LinearLayout中是很難做到的,在RelativeLayout中強行實現也可以,不過…實在是有寫蛋疼。理解ConstrainLayout可以像其名字一樣,藉助彈簧牽引的模型來理解。下面,將一些常用的屬性總結如下,方便記憶。

四周牽引

layout_constraintLeft_toLeftOf: 將目標控制元件的左側牽引到另外一個控制元件的左側
layout_constraintRight_toLeftOf
: 將目標控制元件的右側牽引到另外一個控制元件的左側 layout_constraintLeft_toRightOf: 將目標控制元件的左側牽引到另外一個控制元件的右側 layout_constraintRight_toRightOf: 將目標控制元件的右側牽引到另外一個控制元件的右側 layout_constraintTop_toTopOf: 將目標控制元件的上側牽引到另外一個控制元件的上側 layout_constraintTop_toBottomOf: 將目標控制元件的上側牽引到另外一個控制元件的下側 layout_constraintBottom_toTopOf: 將目標控制元件的下側牽引到另外一個控制元件的上側
layout_constraintBottom_toBottomOf: 將目標控制元件的下側牽引到另外一個控制元件的下側

基線對齊

layout_constrainBaseline_toBaselineOf:與目標控制元件的基線對齊

start,end類(與left,right類似)

layout_constrainStart_toEndOf:將目標控制元件的左側與另一控制元件的右側對齊
layout_constrainStart_toStartOf:將目標控制元件的左側與另一控制元件的左側對齊
layout_constrainEnd_toStartOf:將目標控制元件的右側與另一控制元件的左側對齊
layout_constrainEnd_toEndOf:將目標控制元件的右側與另一控制元件的右側對齊

佈局邊距

layout_marginStart:左邊距
layout_marginEnd:右邊距
layout_marginLeft:左邊距
layout_marginRight:右邊距
layout_marginLeft:左邊距
layout_marginTop:上邊距
layout_marginBottom:下邊距

基準線(guideline)

orientation:vertical/horizontal  基準線的方向
layout_constrainGuide_begin:基準線起點
layout_constrainGuide_end:基準線終點
layout_constrainGuide_percent:基準線百分比模式,用於指定位置

牽引力

layout_constrainHorizontal_bias:水平方向上的牽引力
layout_constrainVertical_bias:垂直方向上的牽引力

鏈樣式(ChainStyle)

當幾個控制元件互相牽引,組成一個鏈時,此時我們可以對該鏈的佈局進行一些調整,類似flexbox的屬性:
常見的屬性有:spread, packed, spread_inside

layout_constrainHorizontal_chainStyle:水平方向上的樣式
layout_constrainVertical_chainStyle:垂直方向上的樣子

套用官網的示例:
chain styles

鏈權重

同樣的,當幾個控制元件組成鏈時,可以像LinearLayout一樣,對其設定權重分佈,調節大小

layout_constrainVertical_weight:設定該控制元件在鏈中的權重

寬高屬性

ConstrainLayout的寬高屬性與普通的佈局有所不同,其屬性分為三種:wrap_content,具體數值,match_contraint。其中前兩種和其他佈局類似,當寬高屬性設定為match_contraint時,其xml屬性顯示為:0dp,表現屬性為佈滿約束的區域。

與此同時,ConstrainLayout還支援一種比例的屬性:

layout_constrainDimensionRatio:"w,13:2"/"h, 23:23",其中w,h可以不註明, 預設為寬高比

使用總結:

使用約束佈局可以在很大程度上減少之前大量使用Linearlayout等造成的佈局層次過深的問題,使用上比RelativeLayout要方便一些,但是在特殊情況的適配上(比如文字過多等),要特別主意。IDE自帶的拖拽工具可以滿足簡單頁面的佈局,但是複雜頁面在實際體驗上,感覺不如手寫來的快…目前來看,還是不夠智慧。

總體上講,可以一用。︿( ̄︶ ̄)︿