Android全新布局Constraintlayout初探

前言:2016 Google I/O上,google帶來了全新的布局方式:約束布局ConstraintLayout边灭,我也在最近試用了一下這種全新的布局方式

ConstraintLayout是什么

ConstraintLayout可以說是相對布局RelativeLayout的升級版,它允許我們在layout上設(shè)計子控件與子控件之間的位置關(guān)系健盒∪奘荩或許你會說,這不就是RelativeLayout之前一直在干的事情嗎扣癣?
但我們用RelativeLayout時惰帽,經(jīng)常會出現(xiàn)多層布局嵌套,而ConstraintLayout往往只需要一層就可以滿足需求父虑,從而提高軟件布局渲染的性能该酗。

例如:

相對布局RelativeLayout允許我們用以下4個屬性來設(shè)置view與view之間的位置關(guān)系

  • layout_toRightOf
  • layout_toLeftOf
  • layout_toTopOf
  • layout_toBottomOf

然而,約束布局ConstraintLayout帶來了眾多屬性

  • layout_constraintTop_toTopOf
  • layout_constraintTop_toBottomOf
  • layout_constraintBottom_toTopOf
  • layout_constraintBottom_toBottomOf
  • layout_constraintLeft_toTopOf
  • layout_constraintLeft_toBottomOf
  • layout_constraintLeft_toLeftOf
  • layout_constraintLeft_toRightOf
  • layout_constraintRight_toTopOf
  • layout_constraintRight_toBottomOf
  • layout_constraintRight_toLeftOf
  • layout_constraintRight_toRightOf
  • ......

這么多屬性士嚎,中間的constraintXXX又是什么意思呢呜魄?不用想了,直接新建一個項目航邢,一探究竟就知道了耕赘!

怎樣使用ConstraintLayout

  1. 下載Android Studio 2.2 Preview2(2.1正式版沒有該功能骄蝇,必須安裝最新的版本)
    http://tools.android.com/download/studio/canary/latest
  2. 新建項目膳殷,在build.gradle中添加
dependencies 
{
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
}

ok,切換到布局的Design頁面九火,拖動一個ImageView到布局里面赚窃,如下圖:

init.png

(圖)分了兩部分,左邊為設(shè)計預(yù)覽岔激,右邊為藍圖模式

點擊一下左邊視圖的imageview勒极,會出現(xiàn)4邊各有一個小圓和4角各有一個小正方形:小圓手柄(調(diào)整手柄)可以調(diào)節(jié)控件的大小,而正方形手柄(約束手柄)可以調(diào)整控件的位置虑鼎。嘗試把4個約束手柄分別拉到界面的邊緣辱匿,看看有什么情況出現(xiàn):

center_layout.gif

Android Studio自動把該imageview居中,來看看xml布局代碼:

<ImageView
            android:src="@drawable/abc_ic_menu_cut_material"
            android:layout_width="91dp"
            android:layout_height="59dp"
            android:id="@+id/imageView"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginEnd="16dp"
            android:layout_marginBottom="16dp"
            app:layout_constraintLeft_toLeftOf="@+id/activity_constraint_layout"
            app:layout_constraintTop_toTopOf="@+id/activity_constraint_layout"
            app:layout_constraintRight_toRightOf="@+id/activity_constraint_layout"
            app:layout_constraintBottom_toBottomOf="@+id/activity_constraint_layout"
            />

可以看到炫彩,自動添加了4個ConstraintLayout的屬性匾七。還是不太懂,我們再添加一個TextView來試試看:

under_layout.gif

把TextView放到ImageView下面江兢,會自動把TextView的左右約束與ImageView的左右約束連接起來昨忆。我再把TextView的頂部約束和ImageView的底部約束兩者連接起來,看看xml代碼發(fā)生了怎樣的變化:

<TextView
            android:text="TextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:id="@+id/textView"
            android:layout_marginTop="8dp"
            app:layout_constraintLeft_toLeftOf="@+id/imageView" 
            app:layout_constraintTop_toBottomOf="@+id/imageView"
            app:layout_constraintRight_toRightOf="@+id/imageView"
            />

多了3個ConstraintLayout的屬性杉允。TextView顯示在ImageView的正下方邑贴。如果我再添加一個layout_constraintBottom_toTopOf屬性呢(也就是兩者的頂部約束連接)席里?

噢!TextView疊加在ImageView的上面拢驾。

原來奖磁,constraintXXX的意思是XXX約束在另一個view的什么位置。

例如控件A定義了app:layout_constraintLeft_toLeftOf="@+id/控件B"

說明控件A的左邊與控件B的左邊位置要一致繁疤。

再定義控件A的app:layout_constraintBottom_toTopOf="@+id/控件B"

說明控件A的底部與控件B的頂部位置要一致署穗,言下之意就是A出現(xiàn)在B的上方了。

結(jié)合上面兩個屬性嵌洼,A就會出現(xiàn)在B的左上方的位置上案疲。

試試只添加控件A的app:layout_constraintLeft_toLeftOf="@+id/控件B"和app:layout_constraintTop_toTopOf="@+id/imageView",看看是不是控件A疊加在控件B的上面麻养,有點FrameLayout的味道吧:址取!鳖昌!

其實多動手拖拉一下备畦,就會明白這個全新布局的用法了。對于精細布局许昨,還是蠻有效果的呢6巍!糕档!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末莉恼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子速那,更是在濱河造成了極大的恐慌俐银,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件端仰,死亡現(xiàn)場離奇詭異捶惜,居然都是意外死亡,警方通過查閱死者的電腦和手機荔烧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門吱七,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹤竭,你說我怎么就攤上這事踊餐。” “怎么了诺擅?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵市袖,是天一觀的道長。 經(jīng)常有香客問我,道長苍碟,這世上最難降的妖魔是什么酒觅? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮微峰,結(jié)果婚禮上舷丹,老公的妹妹穿的比我還像新娘。我一直安慰自己蜓肆,他們只是感情好颜凯,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仗扬,像睡著了一般症概。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上早芭,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天彼城,我揣著相機與錄音,去河邊找鬼退个。 笑死募壕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的语盈。 我是一名探鬼主播舱馅,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刀荒!你這毒婦竟也來了代嗤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤照棋,失蹤者是張志新(化名)和其女友劉穎资溃,沒想到半個月后武翎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烈炭,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年宝恶,在試婚紗的時候發(fā)現(xiàn)自己被綠了符隙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡垫毙,死狀恐怖霹疫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情综芥,我是刑警寧澤丽蝎,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響屠阻,放射性物質(zhì)發(fā)生泄漏红省。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一国觉、第九天 我趴在偏房一處隱蔽的房頂上張望吧恃。 院中可真熱鬧,春花似錦麻诀、人聲如沸痕寓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呻率。三九已至,卻和暖如春呻引,著一層夾襖步出監(jiān)牢的瞬間筷凤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工苞七, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藐守,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓蹂风,卻偏偏與公主長得像卢厂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惠啄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容