ConstraintLayout
翻譯為 約束布局,也有人把它稱作 增強型的相對布局,由 2016 年 Google I/O 推出。
扁平式的布局方式,無任何嵌套,減少布局的層級,優化渲染性能。從支持力度而言,將成為主流布局樣式,完全代替其他布局。
版本
Android Studio是2.2或以上版本
ConstraintLayout是一個Support庫,意味着向前兼容,它可以兼容至API 9,也就是Android 2.3,鑒於現在市場上手機基本都是2.3及以上的,所以如果不是特殊情況,開發者可以不用考慮版本問題。
需要在build.gradle中加入
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
新特性
相對於傳統布局,ConstraintLayout在以下方面提供了一些新的特性:
- 相對定位
- 外邊距
- 居中和傾向
- 可見性的表現
- 尺寸約束
- Chain
- 輔助工具
Layout Editor全景
- 工具欄(Toolbar):提供在編輯器中配置布局外觀和編輯布局屬性的按鈕
- Palette:提供小部件和布局的列表,您可以將它們拖動到編輯器內的布局中
- Component Tree:顯示布局的視圖層次結構。在此處點擊某個項目將看到它在編輯器中被選中
- 設計視圖:用來顯示界面
- blueprint視圖:在該視圖中可以清晰的看到布局相關信息,約束關系、邊距等
- 屬性(Attributes):針對當前選擇的視圖提供屬性控件
Design和Text選項卡
- Design:可以在LayoutEditor中配置布局的外觀
- Text :查看xml中的布局代碼,同時在Preview窗口中查看當前界面顯示
優點:
1.性能更優,在測量/布局階段的性能比RelativeLayout高40%,詳細對比可見:解析ConstraintLayout的性能優勢
2.基本所有復雜的布局都只需要一層,之所以說是基本所有,意味着有特殊情況,就需要嵌套了
3.百分比對齊自適應,美滋滋,可以使用Guidelines參照線,美滋滋。
4.可以直接拖拽控件,手動調整參數。
缺點:
1.界面控件很復雜的時候,拖拉卡頓,以及容易誤操作;
2.更多的新增的XML屬性;
3.不支持gravity屬性;
4.每個控件都必須有id;
拖拽控件可以參考郭霖大神的博客: https://blog.csdn.net/guolin_blog/article/details/53122387
官網:
https://constraintlayout.com/basics/barriers.html
https://developer.android.google.cn/reference/android/support/constraint/ConstraintLayout#Chains