Android的约束布局ConstaintLayout

[size=large]ConstaintLayout的初次使用总结 [/size]
转载请注明出处:[url] http://renyuan-1991.iteye.com/blog/2304152[/url]
最近google I/O大会上带来7.0的一些新的东西,而我们开发最关注的可能就是Adroid Studio2.2和ConstraintLayout这个依赖的约束库了。
当我们需要用到这个布局的时候我们要准备好2.2以上版本的AS,
然后在项目中添加依赖:

dependencies {  
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
}


[size=medium]新增属性:[/size]

app:layout_editor_absoluteX
app:layout_editor_absoluteY


上面这两个属性用于指定控件的绝对位置。通过这个属性指定位置的控件可以不需要约束关系。

app:layout_constraintBottom_toBottomOf="@+id/activity_main" 
app:layout_constraintLeft_toLeftOf="@+id/activity_main"
app:layout_constraintRight_toRightOf="@+id/activity_main"
app:layout_constraintTop_toTopOf="@+id/activity_main"


以上四个属性用来指定控件相对于任何其他单位的约束关系(约束对象可以是父控件,可以是同级的其他控件)。如果不指定绝对位置也不指定约束条件那么运行后这个控件就会被放置在默认的起始位置即父控件的左上角相对于父控件坐标为(0,0)地方。以上的四个属性是成对出现的,即同一个方向上的两个约束必须成对出现。也就是说,当我们指定layout_constraintBottom_toBottomOf的时候必须要指定layout_constraintTop_toTopOf才会生效,而这个时候该控件的位置才会用layout_constraintVertical_bias这个属性来描述。屏幕的高度减去该控件的高度再减去该控件的margintop和marginbottom剩余的高度我们用100%表示,那么layout_constraintVertical_bias的值表示的就是该控件上边的外边距占剩余高度的比例。[img]http://dl2.iteye.com/upload/attachment/0118/2281/44b6e494-86d4-3be1-9271-cf823a1f33cc.png[/img]
上图中的波浪线A部分加上B部分
就是100%暂且称为波浪线总长度吧。那么layout_constraintVertical_bias就表示A部分占据波浪线总长度的比例。图中的波浪线并没有到达屏幕边缘,距离上边缘72dp距离下边缘16dp。计算比例是在去掉margin之后的剩余空间进行的,与margin无关。水平方向的同理。

app:layout_constraintLeft_toRightOf
<!--本控件的左边参照约束控件的右边-->
app:layout_constraintRight_toLeftOf
<!--本控件的右边参照约束控件的左边-->
app:layout_constraintTop_toBottomOf
<!--本控件的上边参照约束控件的下边-->
app:layout_constraintBottom_toTopOf
<!--本控件的下边参照约束控件的上边-->


以上几个属性主要是控件与控件之间的约束,规则同上。

app:layout_constraintBaseline_toBaselineOf:让控件的基线对其

TextView这种控件就算我们用Wrap_content文字也不会紧贴控件边缘,两个不同字体大小的textview就可以用这个基线进行约束对其。

app:layout_constraintStart_toStartOf
app:layout_constraintEnd_toEndOf
app:layout_constraintStart_toEndOf
app:layout_constraintEnd_toStartOf

这几个约束比较特殊,我们可以理解为这几个属性是用来给控件指定起始位置的,之后的margin是在这个值的基础上进行偏移的。如下图:
[img]http://dl2.iteye.com/upload/attachment/0118/2295/ee3afd6e-035e-3bce-a08d-d1eb0d6e148d.png[/img]

app:layout_constraintCenterX_toCenterX
app:layout_constraintCenterY_toCenterY

以上两个属性,顾名思义就是在X轴或者Y轴方向上中心对其,同样,这个属性的优先级是高于margin的。指定这个值后margin值指定的位置后再次偏移。这个时候一旦拖动控件就会生成leftToright这样的属性,生成这种属性后centertocenter就没什么作用了。

如果需要让控件的宽高以固定的比例展示可以用constraintDimensionRatio来制定(如:app:layout_constraintDimensionRatio="1:3"表示宽高比为1:3)这个属性生效需要以下条件:

* left ,right ,top ,bottom四条边都需要约束,bottom的约束可以用baseline代替。
* 宽高至少有一个是0dp或者-1dp,如果都是0dp的则会以父布局能容下的最大范围显示。

[size=medium]参考线[/size]
我们可以再布局中添加水平或垂直的两种参考线Guideline。接下来的三个属性就只能用在Guideline上。

app:relativePercent
app:relativeBegin
app:relativeEnd
app:orientation


前面三个属性只需要任意一个就能确定参考线的位置。orientation用来指定参考线是水平还是垂直。relativePercent是一百分比的形式表示参考线所处的位置。relativeBegin和RelativeEnd分别表示距离起点和终点的距离(水平和垂直方向的分别一屏幕顶端和底端、屏幕左边和右边表示起点和终点)

[size=medium]说明[/size]
在ConstraintLayout的子布局中如果有ViewGroup类型的控件(如:相对布局,线性布局)这类控件的子空间不能使用约束的属性。而且该布局不能拖动(AS2.2预览版).


转载请注明出处:[url] http://renyuan-1991.iteye.com/blog/2304152[/url]
希望爱好编程的小伙伴能加这个群,互相帮助,共同学习。群号: 141877583
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值