ConstraintLayout之ConstraintSet

作者: UP7CR | 来源:发表于2017-09-19 20:52 被阅读1957次

    自从用了ConstraintLayout,发现布局写法又升华了,嵌套减少了,层次更清晰了。

    在ConstraintLayout出来之前,就是在LinearLayout、RelativeLayout时代,如果想要在代码中动态修改布局中控件的尺寸、位置、与其他控件的相对关系等,我们都用的是LayoutParams,在刚接触ConstraintLayout的时候,我也以为仍然是用LayoutParams,结果发现有ConstraintSet这么一个好东西,简直事半功倍~

    1,首先,要声明一下ConstraintSet对象。

    ConstraintSet set =new ConstraintSet();

    2,其次,会有三个clone方法,可以任选其一。

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

    clone方法你可以这么理解:
    比如你的父布局是ConstraintLayout,名为rootLayoutrootLayout下有若干控件,而你只需动态修改一个TextView的相对位置或者尺寸,那么你就要先set.clone(rootLayout);等于copy了整个布局的控件与属性,然后做下面的事情。。。

    3,挑几个有代表性的属性说一下:

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

    设置mViewSwitcher控件的顶边与mTitleView的底边对齐,且之间margin值是50px:
    set.connect(mViewSwitcher.getId(), ConstraintSet.TOP, mTitleView.getId(), ConstraintSet.BOTTOM, 50);

    set.centerHorizontally(int viewId, int toView)

    设置mTimeView水平剧中于parent
    set.centerHorizontally(mTimerView.getId(), ConstraintSet.PARENT_ID);

    set.constrainHeight(int viewId, int height);

    设置mStateLine的高度为2px
    set.constrainHeight(mStateLine.getId(), 2);

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

    最后说一下:
    ConstraintSet还提供了上述第三步方法中的重载方法以及其他没提到的一些方法,比如:

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

    等等,基本满足了可以在xml中设置的那些属性。

    OK,用起来吧童鞋们~~

    ![欢迎关注我的公众号](https://img.haomeiwen.com/i1857762/8566f569f6b3f031.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    相关文章

      网友评论

        本文标题:ConstraintLayout之ConstraintSet

        本文链接:https://www.haomeiwen.com/subject/qxugsxtx.html