ConstraintLayout——約束布局全解析

前言

ConstraintLayout在android2.2以后出現(xiàn)测蹲,現(xiàn)在studio升級到3.0以后扣甲,基本上都是xml文件默認出現(xiàn)的根布局了琉挖。

此篇文章的編寫參考以下鏈接:
Android新特性介紹示辈,ConstraintLayout完全解析
哲♂學三幻神帶你學習ConstraintLayout(約束布局)
在此表示感謝矾麻!

今天講解的內(nèi)容包括:

  1. ConstraintLayout優(yōu)勢與缺點
  2. ConstraintLayout使用詳解
  3. ConstraintLayout布局xml屬性介紹
  4. 部分布局演示講解
一.ConstraintLayout優(yōu)勢與缺點

ConstraintLayout相對于RelativeLayout及其他布局來說险耀,具備以下優(yōu)勢:

  1. 布局層級結(jié)構(gòu)比以前要少胰耗,不會嵌套很多柴灯,性能比RelativeLayout高
  2. 可以手動拖控件進行布局

ConstraintLayout缺點:

  1. 界面復雜的時候赠群,拖動控件會影響整個布局
  2. 增加更多新的xml屬性查描,不支持gravity屬性,margin設置負值dp不起作用,每個控件都得有id
  3. ConstraintLayout 只能顯示一頁的內(nèi)容冬三,超過部分是不會顯示的T扔汀!勾笆!
    為此你可能需在外面再套一層: NestedScrollView 或 ScrollView!
二.ConstraintLayout使用詳解
2.1 配置

使用ConstraintLayout敌蚜,需要在 app module的build.gradle中添加依賴,一般studio3.0的話基本已經(jīng)自動給你添加了窝爪。

dependencies {
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
}
2.2 給布局添加控件

只需要將控件拖到布局中即可,如下圖:


1.gif

這里我只是將控件放到布局中蒲每,并未添加任何約束纷跛,預覽中顯示的控件位置并非實際運行效果,其實一個控件在未添加任何約束的時候邀杏,是默認顯示在界面左上角的贫奠。

控件的約束包括豎直和水平兩個方向,由控件四周顯示的四個圓圈來控制


image.png

我們可以將約束添加到ConstraintLayout上望蜡,也可以添加到另一個控件上叮阅,下面來具體介紹。

2.3 將控件的約束添加到ConstraintLayout上

舉例泣特,我們要將一個button放到ConstraintLayout右上角浩姥,我們可以這樣操作:


2.gif

這里大家可能會注意到button與布局右上角有一定間隙,這是因為設置了控件默認margin状您,若要使無縫貼合右上角勒叠,可以將默認margin設置為0,再進行控件的拖動膏孟,如下:


3.gif

大家可以看到眯分,一開始設置的默認margin是8dp,然后我設置成0dp柒桑,最后將控件拖曳到右上角

如果要將控件放到ConstraintLayout布局正中央弊决,可以這樣操作:


4.gif
2.4 將控件的約束添加到另一個控件上

例如我要將控件A放置在控件B的正下方,并距B的top處108dp魁淳,可以這樣操作:


5.gif

大家可以看出控件A依賴控件B后飘诗,在移動控件B的時候,控件A也是跟著動的界逛。

2.5 基線約束

有時我們會涉及到要求輸入框文字和TextView顯示的文字底部對齊昆稿,只需要點擊editText控件下方的“ab”圖標,然后牽引到TextView的底部即可息拜,具體操作如下:


4.gif

添加約束的基本使用已經(jīng)介紹完畢溉潭,現(xiàn)在講講刪除約束净响。刪除約束包括刪除單個控件的單個約束,刪除單個控件的所有約束和刪除ConstraintLayout布局中所有控件的所有約束

2.6 刪除單個控件的單個約束

例如我要刪除控件A在控件B上方距控件B 108dp距離的這個約束喳瓣,只需要將鼠標放到控件A正下方的圓圈上(此時對應圓圈會變紅)馋贤,然后左鍵單擊圓圈,即取消了A距離B 108dp的這個約束畏陕,操作如下:


6.gif
2.7 刪除單個控件的所有約束

以刪除控件A上所有約束為例配乓,單擊控件A,會發(fā)現(xiàn)A左下角有兩個圖標蹭秋,“X”和“ab”扰付,點擊“X”圖標即刪除A上所有約束堤撵,操作如下:


7.gif
2.8 刪除ConstraintLayout布局中所有控件的所有約束

點擊布局界面中的
image.png

按鈕可以刪除ConstraintLayout中所有控件的所有約束仁讨,操作如下:


8.gif
2.9 Inspector介紹

在進行布局的時候,我們還要關注這個界面:


image.png

下面的部分都是些基本屬性的使用实昨,這里就不做介紹了洞豁,下面重點講講上圖中的這部分:


image.png

圖中有一個縱向進度條和一個橫向進度條,當然有時他們會都不出現(xiàn)或者只出現(xiàn)一個荒给,那是因為你沒有設置對應控件的margin丈挟。其中橫縱拉動條是設置控件位于布局中的橫向和縱向位置的百分比,操作如下:
1.gif
2.10 給控件設置margin

直接在Inspector的對應上下左右輸入margin值志电,單位dp曙咽,然后點擊回車,就能設置對應位置的margin值挑辆,操作如下:


2.gif
2.11 Inspector中的wrap content例朱,固定值與any size

在Inspector的方塊中可以設置控件的模式,圖標如下:

  1. “>>>>” 表示 wrap content
  2. “|---------|”表示固定值
  3. image.png

    ”表示any size鱼蝉,它有點類似于match parent洒嗤,但和match parent并不一樣,是屬于ConstraintLayout中特有的一種大小控制方式魁亦,

然后我們將鼠標放置到“>>>>”上進行左鍵單擊的時候渔隶,三中模式就會來回切換
下面我們來重點講解一下anySize模式

單獨操作控件A時,anySize效果是這樣的:


3.gif

可以看到洁奈,其實是可以實現(xiàn)控件撐滿全屏的(如果屏幕中就一個控件)

然后看看兩個控件存在依賴的時候间唉,anySize的表現(xiàn):


4.gif

可以看到此時anySize與match parent的不同,anySize是占據(jù)這個控件之外的所有空間

2.12 Guidelines講解

Guidelines是通常用來輔助做百分比布局的利术,也分為橫向和縱向
下面以添加縱向Guidelines為例
Guidelines的添加操作如下:


1.gif

或者這樣添加:


2.gif

Guidelines默認是設置dp的终吼,要切換成百分比布局,可以點擊上面的“三角”符號氯哮,當出現(xiàn)百分號的時候际跪,證明是百分比布局了商佛,下面以設置button
占屏幕寬度20%為例,操作如下:
3.gif

Guidelines設置占屏幕高度的百分比類似姆打,當點擊Guidelines的“三角”切換百分比失效的時候良姆,大家可以在xml中用代碼設置百分比,類似如下:
    <android.support.constraint.Guideline
        android:id="@+id/guideline5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.2" />

app:layout_constraintGuide_percent="0.2"就是設置百分比的屬性幔戏,記得值應該為小數(shù)

2.13 Chains(鏈)

有時需要連續(xù)調(diào)節(jié)幾個相連控件之間的關系玛追,則需要用到Chains,Chains有三種模式闲延,點擊控件右下角的“鏈條”圖標痊剖,能切換不同的模式,下面就Chains的整體操作做以演示:


5.gif

其中多選控件的時候垒玲,需要按住shift并單擊控件陆馁,然后添加鏈的時候要選中控件,右鍵合愈,選擇chain

2.14 自動約束

這里請參考Android新特性介紹叮贩,ConstraintLayout完全解析

三.ConstraintLayout布局xml屬性介紹

請參考哲♂學三幻神帶你學習ConstraintLayout(約束布局)中關于屬性的介紹

四.部分布局演示講解

這里主要講一個基本標題欄布局,演示如下:


6.gif

然后就是一般的類似一個控件在另一個控件上壓一半的布局佛析,這個一般在個人設置的圖像布局部分會出現(xiàn)益老,下面做一個類似布局的操作演示:


7.gif

ok,今天關于ConstraintLayout的布局就講到這里了寸莫,謝謝誒捺萌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市膘茎,隨后出現(xiàn)的幾起案子桃纯,更是在濱河造成了極大的恐慌,老刑警劉巖辽狈,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慈参,死亡現(xiàn)場離奇詭異,居然都是意外死亡刮萌,警方通過查閱死者的電腦和手機驮配,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來着茸,“玉大人壮锻,你說我怎么就攤上這事′汤” “怎么了猜绣?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敬特。 經(jīng)常有香客問我掰邢,道長牺陶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任辣之,我火速辦了婚禮掰伸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怀估。我一直安慰自己狮鸭,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布多搀。 她就那樣靜靜地躺著歧蕉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪康铭。 梳的紋絲不亂的頭發(fā)上惯退,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音麻削,去河邊找鬼蒸痹。 笑死春弥,一個胖子當著我的面吹牛呛哟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匿沛,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扫责,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逃呼?” 一聲冷哼從身側(cè)響起鳖孤,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抡笼,沒想到半個月后苏揣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡推姻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年平匈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藏古。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡增炭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拧晕,到底是詐尸還是另有隱情隙姿,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布厂捞,位于F島的核電站输玷,受9級特大地震影響队丝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欲鹏,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一炭玫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧貌虾,春花似錦吞加、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袄膏,卻和暖如春践图,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沉馆。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工码党, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斥黑。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓揖盘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锌奴。 傳聞我的和親對象是個殘疾皇子兽狭,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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