寫在前面的話:
谷歌在2016年自己研發的類似于IOS約束的布局,可以很好的完成自定義的布局控件的適配,現如今2K甚至是4K屏的出現,導致很多手機應用的開發受到適配上的限制,但ConstraintLayout就是為簡化手機適配,減少程序員使用dimens文件造成app體積增大以及程序員自己代碼量的增多。現市面上的博文都是根據 “拖拉彈拽” 的方式來使用ConstraintLayout,而真正意義上的程序員是不需要鼠標進行操作的,所以本篇文章用通俗易懂的方式,列出代碼相關的屬性,來探究此布局的用法。
1、ConstraintLayout詳解:
1.1、ConstrainLayout基本理解:
在日常開發過程中我們總會碰到一個名叫RelativeLayout布局,它就是我們ConstrainLayout理解的重大核心,我們可以就將ConstraintLayout理解為可自適應,多功能的RelativeLayout。
1.2、ConstrainLayout中,子view的布局方式:
在相對布局里面,我們經常做的事情就是使用這樣的屬性:“android:layout_alignParentXXX”,這里XXX有常見的bottom,top,left,right,分別配置子item對于RelativeLayout的里面的位置。而ConstrainLayout里面將此類型的屬性升級為自帶的“app:layout_constraintXXXtoXXX”屬性,這里方便記錄便自己錄入了一個表格:
2、ConstraintLayout下子view屬性詳解:
這個詳細可以參考谷歌官方API文檔,這里貼上鏈接:https://developer.android.google.cn/reference/android/support/constraint/package-summary.html
這里博主簡單的抽取其中比較重要以及經常使用的屬性:
2.1、方位屬性
從上面的四大屬性的衍生,于是有以下圖示:
2.2、子view坐標系
無論從哪個方面來說,坐標系是理解一個view在viewgroup上的一個比較準確的方式。說到這里,我們還記得LinearLayout的weightSum屬性嗎?它能很好的適配線性布局下的某個子控件,在ConstraintLayout中我們也有相類似的子view屬性,來達到這樣的布局適配效果,其展示方式如圖所示:
2.3、適配屬性之goneMargin
本屬性比較特殊,是一個自定義控制的屬性,即如圖所示:
2.4、寬高比適配
在ConstraintLayout中,子view可以根據自己的屬性來顯示自定義的方式。“android:layout_width”,"android:layout_height"這兩個屬性很關鍵,在設置為"warp_content"時,子view會根據屏幕的尺寸,適配全部屏幕。而當設置為"0dp"的時候,就是為自定義weight的時候,這和LinearLayout使用weight進行適配相同。以下就是關于設置0dp的時候的說明圖:
這里的“layout_constraintDimensionRatio”是個特殊的屬性,在這里指明的"W,1:2"<w一定大寫>的值,是明確指代類似圖上的margin與view本身的1/2的比例值,如果沒有寫對于父控件的相關約束屬性,那么就是兩邊的margin疊加起來,子view就往某一邊伸縮。同樣,限定值為"H, 1:2"是Height變化伸縮的效果。這樣一個子view就會根據ConstraintLayout本身而去完成比例適配,相當方便。
結尾:以上就是我花一天的時間去研究的新控件相關的屬性,關于此控件還有很多種屬性值得研究,期待后期研究深入了,寫一個補充的文章,現在ConstraintLayout版本也才1.0.2,我相信谷歌在之后還會改善此控件的源碼來更方便我們開發者使用。