Android約束布局解析
UI布局常見問題
UI設(shè)計有時毫無規(guī)律且復(fù)雜艇抠,使用基礎(chǔ)布局十分困難復(fù)雜炬灭,需要多層嵌套
有時設(shè)計師的標(biāo)注不夠科學(xué)荣赶,往往簡單標(biāo)注元素之間距離训唱。缺少對齊方式和布局空間的概念玫霎,往往需要自己推敲實現(xiàn)凿滤,效率難以保證。
解決方案:
2016的 Google I/O 大會上推出的全新的布局控件 ConstraintLayout并得到官方的大力推廣庶近。ConstraintLayout 中文直譯就是約束布局翁脆,顧名思義就是通過對控件進(jìn)行約束布局,簡單理解就可以認(rèn)為它是RelativeLayout的超級加強升級版本鼻种》捶可以有效解決布局嵌套的性能問題和復(fù)雜布局的快速實現(xiàn),性能大約提高40% 叉钥。ConstraintLayout實現(xiàn)布局的方法也十分簡單罢缸,可以通過Android Studio 提供的編輯器,簡單拖拽就可以快速實現(xiàn)布局沼侣,就好像UI設(shè)計師操作PhotoShop一樣祖能,熟練掌握以后,安裝UI標(biāo)注就可以直接還原設(shè)計效果蛾洛。
基本屬性
13個基本約束屬性用來控制子View的相對位置养铸,layout_constraintXXX_ 表示View的4個位置屬性,后面的_toXXof和RelativeLayout類似轧膘,指定View的某個位置屬性 約束的對象和方位钞螟。
- layout_constraintBottom_toBottomOf
- layout_constraintBottom_toTopOf
- layout_constraintStart_toEndOf
- layout_constraintStart_toStartOf
- layout_constraintVertical_bias
- layout_constraintHorizontal_bias :
- layout_constraintBaseline_toBaselineOf:基線對齊,將視圖的文本基線與另一個視圖的文本基線對齊
Guideline (引導(dǎo)線) 是用來進(jìn)行輔助定位的不可見元素谎碍,分為vertical 和 horizontal 兩種鳞滨,在一些沒有規(guī)律的UI對齊 定位時,十分有用蟆淀。
Chains(鏈)
一種特定的約束拯啦,一個鏈包含了多個視圖,它允許鏈中的視圖共享空間熔任,并控制可用空間在它們之間如何分配褒链。該效果與 LinearLayout 的 Weiget 類似,但是鏈的作用遠(yuǎn)遠(yuǎn)超過它疑苔。Chains包括Horizontal甫匹、Vertical兩種。
Cycle Chain Mode(鏈?zhǔn)侥J剑?/p>
- layout_constraintHorizontal_chainStyle
- layout_constraintVertical_chainStyle
參數(shù):
spread:將可用空間以均勻分布的方式將視圖放置在鏈中(默認(rèn)模式)
spread_inside:將鏈中最外面的視圖對齊到外邊緣,然后在可用空間內(nèi)均勻的放置鏈中的其他視圖
packed:將鏈中的視圖緊緊的放在一起(可以提供邊距讓其分開)兵迅,然后讓其居中在可用空間內(nèi)
Chains 還能對鏈中單獨的視圖控件設(shè)置 Weiget抢韭,使用和 LinearLayout 的 Weiget 一致。
視圖大小控制
- wrap_content
- 指定寬度
- Match Constraints:盡可能擴展以滿足各方的約束(在考慮視圖邊界之后)
- layout_constraintDimensionRatio:設(shè)置控件寬高比恍箭,"h, 3:1"表示高度就只有寬度的三分之一,至少需要有一個尺寸約束設(shè)置未Match Constraints(0dp)
一些實戰(zhàn)的技巧
讓兩個不同尺寸的View刻恭,中心對齊居中
使View于某一個View的一條邊中心對齊