ConstraintLayout
讓你能夠在很平的view結構(沒有多層佈局嵌套)中構建一個複雜的佈局結構. 有點像RelativeLayout
, 全部的view都是根據它和兄弟View和父layout的關係佈局的, 可是它比RelativeLayout
要更加靈活, 在Layout Editor中也更加好用.html
在Layout Editor中你能夠直接靠拖拽來構建ConstraintLayout
.android
爲了在ConstraintLayout
中定義一個view的位置, 你必須給view加上兩條或多條約束(constraints). 每一條約束表明了一種和其餘View(或parent, 或不可見的guideline)之間的聯繫或者對齊關係.git
每一條約束都規定了這個view沿着水平或豎直軸的一個位置, 因此每一個View在每一個軸上都必須至少有一條約束(可是一般須要更多).github
首先確認下載support庫, 在Tools > Android > SDK Manager
的SDK Tools
tab下:
展開Support Repository
, check ConstraintLayout for Android
和Solver for ConstraintLayout
.
Check Show Package Details
, 顯示版本信息.ide
好比當前我最新的版本信息是1.0.0-beta4, 我在module的build.gradle中添加:佈局
dependencies { compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' }
而後點擊Sync便可.gradle
咱們能夠新建佈局, 而後讓它的根節點是android.support.constraint.ConstraintLayout
.ui
除此以外, 咱們還能夠直接轉換已有佈局.
打開Layout, 切換到Design
tab, 而後在Component Tree
窗口, 右擊佈局而後選擇最底部的Convert XXXLayout(這裏是你佈局節點的類型) to ConstraintLayout
.3d
在Design模式下, 從Palette窗口中拖一個View到editor中去. 當你把一個View加入到ConstraintLayout中以後, 它會展現出一個bounding box, 四角的四個小方塊用來拖拽調節大小, 每個邊上都有一個小圓點用來創建約束.
這些小方塊和小圓點都被稱爲handles
.code
點擊View, 而後點擊並拖住一個約束handle, 把它拖拽到一個可用的anchor point(另外一個View的邊緣, layout的邊緣, 或者一個guideline).當你鬆手的時候, 約束就生效了. (有一個默認的margin)
有幾個規則:
要刪掉一個約束, 只須要選擇這個view, 點擊那個對應的handle.
若是你給同一個View加了兩個相反的約束, 約束的線條就會變成彈簧狀, 來顯示兩個相反方向的約束. 當View內容的尺寸固定或者是wrap的時候, 在這種狀況下View就會在兩個約束下居中顯示, 若是你想讓它展開, 那麼就應該修改它的尺寸爲Any Size; 若是你想要保持當前的尺寸, 你能夠調節約束的權重.
一般狀況下能夠加的有這幾種約束:
當打開Autoconnect
模式以後, 每個新加的View都會自動建立約束. Autoconnect模式默認是關閉的.
點擊Infer Constraints
會給layout中當前全部的View建立約束, 這是一個一次性的action. 它會選擇創建最有效的約束, 因此它可能會創建離得很遠的兩個view之間的約束. 不像Autoconnect模式開啓下, 只給新加的View創建約束, 而且只選擇最近的元素.
能夠經過拖拽View四個角的handles來改變View的大小, 可是這樣生成的是hard-coded的尺寸, 對於適配來說這樣是很差的.
你能夠點擊View而後在Properties窗口編輯尺寸.
有三種尺寸模式:
>>>
圖形表示.|-|
表示, 固定尺寸.能夠經過點擊圖形符號來切換這些模式.
注意: 在ConstraintLayout
中的View中不該該使用match_parent
, 而是用"Any Size"(0dp).
當你給一個View的對立兩邊都添加了約束, 而View的尺寸是fixed或者wrap_content, 那麼默認狀況下View就會居中顯示在兩個anchor point之間(bias=50%).
你能夠經過拖拽View或者在Properties窗口中拖拽bias slider來改變它的偏移權重.
能夠在toolbar上點擊默認邊距(8)來修改.
注意這個修改只對修改後新添加的View生效.
每個View的邊距均可以經過Properties窗口修改: 點擊約束線條上的margin數字.
注意提供的值都是8的倍數, 以確保你遵循了Material Design的建議.