ConstraintLayout 的Chain属性,Guideline辅助线

1,378 阅读2分钟

之前项目中,constrintLayout使用确实高频;之前没有注意,在一些布局设计过程中,还是或多或少存在一些布局嵌套冗余的场景;

类型上图这种布局,之前如果外层布局是constrintLayout情况下,可能会在这3个item 外层再嵌套一层LineraLayout,然后chain_2 设置marginStart一个距离

从而实现chain_1 和 chain_2 分离,但是chain_2和chain_3在一起的情况;

诚然,这种方案没什么问题,但是对于性能考虑,还是多嵌套了一层布局,还是有瑕疵的,如果存在大量嵌套,对于低端手机简直就是噩梦;再加上,你这app时不时来点

内存泄漏,泄漏多了,用户也不杀死进程,久而久之,卡顿是必须的;

所以,对于andorid 来说,性能是很宝贵的,本着发现一例,解决一例的原则,这里还是需要优化的;

其实ConstraintLayout 内部各个元素在布局的时候,互相是形成链条的;

常用的有:

layout_constraintStart_toStartOflayout_constraintEnd_toEndOflayout_constraintTop_toTopOflayout_constraintBottom_toBottomOf 等等;

这次主要想说一下:

layout_constraintHorizontal_chainStyle

layout_constraintVertical_chainStyle

就拿 layout_constraintHorizontal_chainStyle 举例子吧:

该属性有3种属性:spread (默认), spread_inside, packed

下面分别举例:spread:

三者是等分宽度的,两端距离左右两边的边界也是有距离的;

spread_inside

和spread 区别在于两端距离左右两边的边界是没有的,即chain_1和chain_3是和父布局左右是没有空隙的;

packed

链条内的3个元素将被捆在一起

实现这个这种效果只需要:给chain_1 即链条的头部,设置 layout_constraintHorizontal_chainStyle,(只有给chain_1设置才有效,给chain_2, chain_3 设置不生效)

Guideline:

作为constraintLayout提供的一个辅助线

我们可以从它的包名可以看出;它默认是gone的,主要提供的作用就是

用于辅助布局,类似为辅助线,可以设置android:orientation属性来确定是横向的还是纵向的。
当设置为vertical的时候,Guideline的宽度为0,高度是parent也就是ConstraintLayout的高度
同样设置为horizontal的时候,高度为0,宽度是parent的宽度

比较常用的属性如下:

layout_constraintGuide_begin,指定左侧或顶部的固定距离,如100dp,在距离左侧或者顶部100dp的位置会出现一条辅助线
layout_constraintGuide_end,指定右侧或底部的固定距离,如30dp,在距离右侧或底部30dp的位置会出现一条辅助线
layout_constraintGuide_percent,指定在父控件中的宽度或高度的百分比,如0.8,表示距离顶部或者左侧的80%的距离。

我在这使用:

layout_constraintGuide_percent = 0.5,chain_1, 底部layout_constraintBottom_toTopOf,相对于guildeline。

总之:

上面这两个属性在帮助我们使用ConstraintLayout 还是很方便的,高频布局,今后还是多多使用吧~