約束布局ConstraintLayout總結

2021-10-04 03:24:25 字數 3591 閱讀 6065

約束顧名思義,就是將該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約束布局問世已經有一段時間了,對於最初的一些開發者來說,早已習慣了相對布局或線性布局的使用,基本上可以滿足日常開發的需求。但是這樣一來,約束布局不就沒有它存在的意義了嗎。從谷歌官方資料來看,約束布局在某些情況下表現要高於線性布局以及相對布局。其特點是層級單一,所有控制項均處於同一層級。...