ConstraintLayout之ConstraintSet

自從用了ConstraintLayout,發(fā)現(xiàn)布局寫法又升華了,嵌套減少了,層次更清晰了。

在ConstraintLayout出來(lái)之前,就是在LinearLayout、RelativeLayout時(shí)代,如果想要在代碼中動(dòng)態(tài)修改布局中控件的尺寸、位置、與其他控件的相對(duì)關(guān)系等,我們都用的是LayoutParams,在剛接觸ConstraintLayout的時(shí)候,我也以為仍然是用LayoutParams,結(jié)果發(fā)現(xiàn)有ConstraintSet這么一個(gè)好東西,簡(jiǎn)直事半功倍~

1,首先,要聲明一下ConstraintSet對(duì)象。

ConstraintSet set =new ConstraintSet();

2,其次,會(huì)有三個(gè)clone方法,可以任選其一。

set.clone(ConstraintLayout constraintLayout);
set.clone(ConstraintSet set);
set.clone(Context context, int constraintLayoutId);

clone方法你可以這么理解:
比如你的父布局是ConstraintLayout,名為rootLayout,rootLayout下有若干控件,而你只需動(dòng)態(tài)修改一個(gè)TextView的相對(duì)位置或者尺寸,那么你就要先set.clone(rootLayout);等于copy了整個(gè)布局的控件與屬性,然后做下面的事情。。。

3,挑幾個(gè)有代表性的屬性說(shuō)一下:

set.connect(int startID, int startSide, int endID, int endSide, int margin);

設(shè)置mViewSwitcher控件的頂邊與mTitleView的底邊對(duì)齊,且之間margin值是50px:
set.connect(mViewSwitcher.getId(), ConstraintSet.TOP, mTitleView.getId(), ConstraintSet.BOTTOM, 50);

set.centerHorizontally(int viewId, int toView)

設(shè)置mTimeView水平劇中于parent
set.centerHorizontally(mTimerView.getId(), ConstraintSet.PARENT_ID);

set.constrainHeight(int viewId, int height);

設(shè)置mStateLine的高度為2px
set.constrainHeight(mStateLine.getId(), 2);

4,最后,apply一下使設(shè)置生效
set.applyTo(rootLayout);

最后說(shuō)一下:
ConstraintSet還提供了上述第三步方法中的重載方法以及其他沒(méi)提到的一些方法,比如:

setGuidelinePercent()
removeFromVerticalChain()
setVerticalChainStyle()
setTranslation()
setScaleX()

等等,基本滿足了可以在xml中設(shè)置的那些屬性。

OK,用起來(lái)吧童鞋們~~

![歡迎關(guān)注我的公眾號(hào)](http://upload-images.jianshu.io/upload_images/1857762-8566f569f6b3f031.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容