前言
ConstraintLayout在android2.2以后出現(xiàn)测蹲,現(xiàn)在studio升級到3.0以后扣甲,基本上都是xml文件默認出現(xiàn)的根布局了琉挖。
此篇文章的編寫參考以下鏈接:
Android新特性介紹示辈,ConstraintLayout完全解析
哲♂學三幻神帶你學習ConstraintLayout(約束布局)
在此表示感謝矾麻!
今天講解的內(nèi)容包括:
- ConstraintLayout優(yōu)勢與缺點
- ConstraintLayout使用詳解
- ConstraintLayout布局xml屬性介紹
- 部分布局演示講解
一.ConstraintLayout優(yōu)勢與缺點
ConstraintLayout相對于RelativeLayout及其他布局來說险耀,具備以下優(yōu)勢:
- 布局層級結(jié)構(gòu)比以前要少胰耗,不會嵌套很多柴灯,性能比RelativeLayout高
- 可以手動拖控件進行布局
ConstraintLayout缺點:
- 界面復雜的時候赠群,拖動控件會影響整個布局
- 增加更多新的xml屬性查描,不支持gravity屬性,margin設置負值dp不起作用,每個控件都得有id
- 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 給布局添加控件
只需要將控件拖到布局中即可,如下圖:
這里我只是將控件放到布局中蒲每,并未添加任何約束纷跛,預覽中顯示的控件位置并非實際運行效果,其實一個控件在未添加任何約束的時候邀杏,是默認顯示在界面左上角的贫奠。
控件的約束包括豎直和水平兩個方向,由控件四周顯示的四個圓圈來控制
我們可以將約束添加到ConstraintLayout上望蜡,也可以添加到另一個控件上叮阅,下面來具體介紹。
2.3 將控件的約束添加到ConstraintLayout上
舉例泣特,我們要將一個button放到ConstraintLayout右上角浩姥,我們可以這樣操作:
這里大家可能會注意到button與布局右上角有一定間隙,這是因為設置了控件默認margin状您,若要使無縫貼合右上角勒叠,可以將默認margin設置為0,再進行控件的拖動膏孟,如下:
大家可以看到眯分,一開始設置的默認margin是8dp,然后我設置成0dp柒桑,最后將控件拖曳到右上角
如果要將控件放到ConstraintLayout布局正中央弊决,可以這樣操作:
2.4 將控件的約束添加到另一個控件上
例如我要將控件A放置在控件B的正下方,并距B的top處108dp魁淳,可以這樣操作:
大家可以看出控件A依賴控件B后飘诗,在移動控件B的時候,控件A也是跟著動的界逛。
2.5 基線約束
有時我們會涉及到要求輸入框文字和TextView顯示的文字底部對齊昆稿,只需要點擊editText控件下方的“ab”圖標,然后牽引到TextView的底部即可息拜,具體操作如下:
添加約束的基本使用已經(jīng)介紹完畢溉潭,現(xiàn)在講講刪除約束净响。刪除約束包括刪除單個控件的單個約束,刪除單個控件的所有約束和刪除ConstraintLayout布局中所有控件的所有約束
2.6 刪除單個控件的單個約束
例如我要刪除控件A在控件B上方距控件B 108dp距離的這個約束喳瓣,只需要將鼠標放到控件A正下方的圓圈上(此時對應圓圈會變紅)馋贤,然后左鍵單擊圓圈,即取消了A距離B 108dp的這個約束畏陕,操作如下:
2.7 刪除單個控件的所有約束
以刪除控件A上所有約束為例配乓,單擊控件A,會發(fā)現(xiàn)A左下角有兩個圖標蹭秋,“X”和“ab”扰付,點擊“X”圖標即刪除A上所有約束堤撵,操作如下:
2.8 刪除ConstraintLayout布局中所有控件的所有約束
點擊布局界面中的按鈕可以刪除ConstraintLayout中所有控件的所有約束仁讨,操作如下:
2.9 Inspector介紹
在進行布局的時候,我們還要關注這個界面:
下面的部分都是些基本屬性的使用实昨,這里就不做介紹了洞豁,下面重點講講上圖中的這部分:
圖中有一個縱向進度條和一個橫向進度條,當然有時他們會都不出現(xiàn)或者只出現(xiàn)一個荒给,那是因為你沒有設置對應控件的margin丈挟。其中橫縱拉動條是設置控件位于布局中的橫向和縱向位置的百分比,操作如下:
2.10 給控件設置margin
直接在Inspector的對應上下左右輸入margin值志电,單位dp曙咽,然后點擊回車,就能設置對應位置的margin值挑辆,操作如下:
2.11 Inspector中的wrap content例朱,固定值與any size
在Inspector的方塊中可以設置控件的模式,圖標如下:
- “>>>>” 表示 wrap content
- “|---------|”表示固定值
-
“ image.png
”表示any size鱼蝉,它有點類似于match parent洒嗤,但和match parent并不一樣,是屬于ConstraintLayout中特有的一種大小控制方式魁亦,
然后我們將鼠標放置到“>>>>”上進行左鍵單擊的時候渔隶,三中模式就會來回切換
下面我們來重點講解一下anySize模式
單獨操作控件A時,anySize效果是這樣的:
可以看到洁奈,其實是可以實現(xiàn)控件撐滿全屏的(如果屏幕中就一個控件)
然后看看兩個控件存在依賴的時候间唉,anySize的表現(xiàn):
可以看到此時anySize與match parent的不同,anySize是占據(jù)這個控件之外的所有空間
2.12 Guidelines講解
Guidelines是通常用來輔助做百分比布局的利术,也分為橫向和縱向
下面以添加縱向Guidelines為例
Guidelines的添加操作如下:
或者這樣添加:
Guidelines默認是設置dp的终吼,要切換成百分比布局,可以點擊上面的“三角”符號氯哮,當出現(xiàn)百分號的時候际跪,證明是百分比布局了商佛,下面以設置button
占屏幕寬度20%為例,操作如下:
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的整體操作做以演示:
其中多選控件的時候垒玲,需要按住shift并單擊控件陆馁,然后添加鏈的時候要選中控件,右鍵合愈,選擇chain
2.14 自動約束
這里請參考Android新特性介紹叮贩,ConstraintLayout完全解析
三.ConstraintLayout布局xml屬性介紹
請參考哲♂學三幻神帶你學習ConstraintLayout(約束布局)中關于屬性的介紹
四.部分布局演示講解
這里主要講一個基本標題欄布局,演示如下:
然后就是一般的類似一個控件在另一個控件上壓一半的布局佛析,這個一般在個人設置的圖像布局部分會出現(xiàn)益老,下面做一個類似布局的操作演示:
ok,今天關于ConstraintLayout的布局就講到這里了寸莫,謝謝誒捺萌。