自律給你自由——設計佈局的新姿式

ConstraintLayout基本界面

在今天的文章開始以前,有個忙想請你們幫一下,但願在京東、淘寶、噹噹、亞馬遜購買了個人書《Android羣英傳:神兵利器》的朋友們,幫忙去網店上給個簡短的評價,舉手之勞,仍是多謝你們啦~~html

更新Android Studio 2.2以後,更新了佈局設計器,同時,引人了ConstraintLayout,這一佈局,旨在下降佈局層級,其主要界面以下所示:android

這裏寫圖片描述

這個界面主要分紅下面幾個部分:微信

  • 左側邊欄,包括Palette組件庫和Component Tree
  • 中間是佈局設計器,包括兩部分,左邊是視圖預覽,右邊是佈局約束
  • 右側邊欄,上面是相似盒子模型的邊界和大小布局設計器,下面是屬性列表

在熟悉了界面以後,咱們要作的就是理解,什麼是ConstraintLayout。ConstraintLayout的核心,實際上就是『約束』,這個翻譯很直接,也很準確,它能夠說是一個強化的 RelativeLayout,只不過比RelativeLayout增長了更多的約束條件和方式,從這一點上去理解,就很容易接受了。app

在第一次引人ConstraintLayout的時候,Android Studio會自動去下載依賴,等他自動完成安裝便可。 最後,在build.gradle中會添加一行依賴:ide

compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'複製代碼

Google提供了一個CodeLab來幫助開發者熟悉這個佈局,地址以下所示:工具

codelabs.developers.google.com/codelabs/co…佈局

同時,2016IO上Google也給出了一個Topic來說解,地址以下所示:測試

youtu.be/sO9aX87hq9cgradle

ConstraintLayout約束類型

簡單的說,約束,就是組件與組件之間的關係,借用官網上的一張圖,咱們來解釋下:ui

這裏寫圖片描述

這裏展現的,就是左右兩個Button直接的關係,這實際上就是一個簡單的相對佈局方式,下面咱們來看一下具體的約束類型。

當咱們點擊一個控件的時候,它的顯示效果如圖所示:

這裏寫圖片描述

這裏主要包含幾種類型的約束

  • 尺寸約束
  • 邊界約束
  • 基準線約束

咱們一一來看。

尺寸約束

尺寸約束使用的是『實心方塊』,如圖:

這裏寫圖片描述

這個很好理解,就是調整組件的大小。

邊界約束

邊界約束使用的是『空心圓圈』,如圖:

這裏寫圖片描述

邊界約束,是使用最多的約束,它用於創建組件與組件之間、組件與Parent邊界之間的約束關係,實際上,就是肯定彼此的相對位置。

基準線約束

基準線約束,使用的是『空心圓角矩形』,如圖:

這裏寫圖片描述

基準線約束,是讓兩個帶有文本屬性的組件進行對齊的,可讓兩個組件的文本按照基準線進行對齊。惟一要注意的是,你須要把鼠標放在控件上,等基準線約束的圖形亮了,才能夠進行拖動。

清除約束

經過工具欄上的『清除約束』按鈕,或者是控件上的懸浮提示,均可以清除一個控件的全部約束條件,如圖:

這裏寫圖片描述

掌握好這幾種約束條件的使用後,就能夠本身去嘗試下了,咱們只要拖一個控件,來體驗下。

約束示例

這裏我把官網上的幾個Demo的動圖Copy過來:

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

自動約束Autoconnect

在佈局設計器的菜單欄上,有一個『磁鐵』同樣的圖標,如圖:

這裏寫圖片描述

默認這個按鈕就是打開的,經過這個,咱們能夠實現組件約束的自動建立,Demo示例如圖:

這裏寫圖片描述

這個和PPT裏面拖動佈局的時候,會彈出對齊的基準線,而後幫你自動居中這些功能相似。實際測試下來,這個功能能夠很方便的在拖動組件的時候,幫你寫好約束,但有些精確的調整,仍是須要手動去建立的。

約束推斷Inference

在佈局設計器的菜單上,還有一個『燈泡』同樣的按鈕,經過這個按鈕,能夠幫咱們自動建立組件間的約束關係,他分析的是一個組件附近的組件,並根據當前在設計面板中的位置來建立約束關係。

約束推斷這個功能很是強大,咱們只須要把組件拖到一個地方,而後就能夠經過推斷,來完成最基本的約束建立,最後,手動進行完善便可。

這裏寫圖片描述

View Inspector

Inspector界面就是設計佈局的右邊欄,包含了一個相似盒子模型的佈局檢查器和對應屬性的屬性列表,如圖所示:

這裏寫圖片描述

屬性這一塊咱們就不看了,和你們在XML中寫的屬性是同樣的,只不過這裏經過可視化的方式弄出來了,這個以前就有了,咱們主要來看下上面的那個界面。

18

這上面的ID,很少說了,這個盒子四周的線,表明着咱們的Margin設置,在工具欄上,還能夠設置Margin的基數,對於MD設計風格,這個基數通常是8dp,因此,這裏能夠選擇X8的Margin:

這裏寫圖片描述

另外,最外面邊框上還有兩個帶數字的小圓圈,這個就是控制相對位置的比例的,如圖:

這裏寫圖片描述

經過這個比例的設置,咱們自然就自帶了百分比佈局。

最後,最難理解的就是盒子裏面的那四根線,如圖:

這裏寫圖片描述

這裏的四根線,在點擊後,會發生變化,總共有如下幾種:

Fixed

這裏寫圖片描述

這樣一個類型的線,可讓你寫定具體的大小數值。

Wrap Content

這裏寫圖片描述

這個就是Wrap Content的含義,包裹內容,沒有發生變化。

AnySize

這裏寫圖片描述

這個就是最難理解的,它表示組件會佔用全部的可用空間來適應約束,相似線性佈局中,設置width=0,weight=1的方式。

Align

在工具欄中,可使用對齊工具,快速給選定組件設置對齊約束,如圖:

這裏寫圖片描述

咱們能夠來演示下:

這裏寫圖片描述

Pack

在工具欄中,可使用Pack工具,快速對組件進行編組操做,如圖:

這裏寫圖片描述

快捷佈局

在一個組件上點擊右鍵,能夠快速建立一些佈局的快捷設計,如圖所示:

這裏寫圖片描述

在這裏,能夠快速設置組件的居中,對齊等方式。

GuideLine

爲了更加靈活的佈局,ConstraintLayout還提供了一個GuideLine,如圖所示:

這裏寫圖片描述

你能夠爲佈局添加水平和豎直引導線,針對這條線來做爲基準線佈局,如圖所示:

這裏寫圖片描述

ConstraintLayout佈局轉換

經過Android Studio,咱們能夠很方便的把一個普通佈局轉化爲ConstraintLayout,在佈局設計器的左邊欄下面的Component Tree來進行轉換,如圖所示:

這裏寫圖片描述

轉換仍是很讚的,但目前還沒試過複雜的佈局是否有問題。

從代碼角度理解ConstraintLayout屬性

ConstraintLayout被稱爲加強的RelativeLayout,是有它的緣由的,相對佈局提供了layout_toBottomOf相似這樣的屬性來控制組件間的相對位置,那麼ConstraintLayout實際上也是同樣的,咱們來看這樣一個屬性:

app:layout_constraintTop_toBottomOf複製代碼

他表明的是『指望組件的頂部,與指定組件的底部對齊』,那麼瞭解了這個解釋方式,其它的屬性就很好理解了,因此說,雖然ConstraintLayout不太建議經過代碼來佈局了,但能理解代碼的含義,對理解ConstraintLayout佈局是很是有幫助的。

歡迎你們關注個人微信公衆號:Android羣英傳

這裏寫圖片描述

最後,上海的開發者注意啦,9月24日,滬江會舉辦一次Android技術沙龍,具體內容你們能夠看這篇文章:

www.huodongxing.com/event/63517…

相關文章
相關標籤/搜索