約束顧名思義,就是將該view約束到指定的view上(包括外層的constraintlayout和其他的布局),實現位置的定位。
因此有時候可能需要更多的定位去約束控制項的位置,強大的功能,靈活的使用給上手帶來了一點點的難度,很多開發者望而生畏。其實掌握之後,真的越用越舒服!!!
constraintlayout的使用需要新增依賴,
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
望名知意,這些的意思是把約束控制項的 上下左右 放到提供約束的控制項的 的 上下左右 位置上。
要想實現水平居中只需設定left與right分別約束parent,而要想實現豎直居中則只需設定top與bottom分別約束parent
layout_constraintbaseline_tobaselineof
baseline指的是文字基線,即使兩個不同寬高的textview,可以把文字基線對齊,即文字對齊。
bias(偏向)
當遇到兩個相反方向的約束時,預設情況下控制項是居中的;然而要想讓控制項偏向某一邊,可以使用bias屬性:
layout_constrainthorizontal_bias 水平偏移
layout_constraintvertical_bias 垂直偏移
bias的大小在0-1之間,等比例進行偏移,適配的時候很好用。
這兩種代表偏移的方向
spread_inside:兩邊不留空間,中間間距平分
spread:完全均分
packed:完全不留間距
需要注意的是:要達到上的的chain效果,他們之間必須完全相互約束,同時chain style的設定都是以第乙個view為基點。同時預設chain style為spread。
可以通過設定權重,進行控制項尺寸的分配
1.margin 作用物件 : 如果某一邊對應的 margin 屬性被設定 , 這些 margin 會被應用於對應的約束 ;
2.margin 作用效果 : 設定 margin 屬性會強制在 被約束的邊 ( 源邊 source side ) 和 約束到的位置 之間 填充指定尺寸的空間 ;
3.margin 屬性型別及取值範圍 : margin 屬性值是尺寸型別 , 設定 dip , px 等數值屬性 , 其值必須大於等於0
4、padding不受影響
gonemargin
gonemargin主要用於約束的控制項可見性被設定為gone的時候使用的margin值,屬性如下:
ayout_gonemarginstart
layout_gonemarginend
layout_gonemarginleft
layout_gon
margintop
layout_gone
marginright
layout_gonemarginbottom
只有用於約束的控制項消失後,該屬性才會生效。
circle
layout_constraintcircle: 代表約束的view的id
layout_constraintcircleangle: 代表約束的角度
layout_constraintcircleradius: 代表約束的半徑大小
控制項的尺寸可以通過四種不同方式指定:
使用指定的尺寸
使用wrap_content,讓控制項自己計算大小
當控制項的高度或寬度為wrap_content時,可以使用下列屬性來控制最大、最小的高度或寬度:
android:minwidth 最小的寬度
android:minheight 最小的高度
android:maxwidth 最大的寬度
android:maxheight 最大的高度
使用 0dp (match_constraint)
官方不推薦在constraintlayout中使用match_parent,可以設定 0dp (match_constraint) 配合約束代替match_parent
例如寬度設為0dp,左右兩邊約束parent的左右兩邊,並設定左邊邊距為50dp
寬高比
當寬或高至少有乙個尺寸被設定為0dp時,可以通過屬性layout_constraintdimensionratio設定寬高比
percent dimension(百分比維度)
layout_constraintwidth_percent
layout_constraintheight_percent 設定為0到1之間的值
optimizer
none : 不使用優化
standard : 預設。只對direct和barrier約束進行優化
direct : 優化直接約束
barrier : 優化屏障約束
chain : 優化鏈式約束(實驗性的)
dimensions : 優化維度測量(實驗性的),減少匹配約束元素的測量數量
barrier屏障
假設有3個控制項abc,c在ab的右邊,但是ab的寬是不固定的,這個時候c無論約束在a的右邊或者b的右邊都不對。當出現這種情況可以用barrier來解決。barrier可以在多個控制項的
一側建立乙個屏障,如下所示
group可以把多個控制項歸為一組,方便隱藏或顯示一組控制項
placeholder指的是佔位符。
在placeholder中可使用setcontent()設定另乙個控制項的id,使這個控制項移動到佔位符的位置。
不管原控制項在哪兒,設定後,該控制項位置都被約束到placeholder位置
guidelineguildline像輔助線一樣,在預覽的時候幫助你完成布局(不會顯示在介面上)。
guildline的主要屬性:
android:orientation 垂直vertical,水平horizontal
layout_constraintguide_begin 開始位置
layout_constraintguide_end 結束位置
layout_constraintguide_percent 距離頂部的百分比(orientation = horizontal時則為距離左邊
ConstraintLayout 約束布局
使用constraintlayout需要我們新增如下依賴 compile com.android.support.constraint constraint layout 1.0.0 alpha4 偏離父容器左邊緣的距離為父容器寬度的25 偏離父容器上邊緣的距離為父容器高度的25 guideline...
ConstraintLayout 約束布局
在以前,android是使用布局如linearlayout relativelayout等來構建頁面,但這些布局使用起來很麻煩,並且經常需要一層一層巢狀,寫乙個簡單的頁面就需要費很大的勁。所以在16年i o大會上,google發布了全新的布局 constraintlayout,其他布局和constr...
Android約束布局
android約束布局問世已經有一段時間了,對於最初的一些開發者來說,早已習慣了相對布局或線性布局的使用,基本上可以滿足日常開發的需求。但是這樣一來,約束布局不就沒有它存在的意義了嗎。從谷歌官方資料來看,約束布局在某些情況下表現要高於線性布局以及相對布局。其特點是層級單一,所有控制項均處於同一層級。...