ConstraintLayout约束布局使用指南

A ConstraintLayout是一个ViewGroup允许您以灵活的方式定位和调整小部件的方法。

注意: ConstraintLayout作为支持库提供,您可以在API级别9(Gingerbread)开始的Android系统上使用。因此,我们计划随着时间的推移丰富其API和功能。

您目前可以使用各种类型的约束:

  • 相对定位
  • 边距
  • 居中定位
  • 圆形定位
  • 可见性行为
  • 尺寸限制
  • 虚拟助手对象
  • 优化

请注意,您不能在约束中具有循环依赖关系。

Developer Guide

相对定位

相对定位是在ConstraintLayout中创建布局的基本构建块之一。这些约束允许您将给定的小部件相对于另一个小部件进行定位。您可以在水平和垂直轴上约束小部件:

  • 水平轴:左,右,起点和终点
  • 垂直轴:顶部,底部和文本基线

一般概念是将窗口小部件的给定侧约束到任何其他窗口小部件的另一侧。

例如,为了将按钮B定位在按钮A的右侧(图1):

图1-相对定位示例

你需要这样做:

<Button android:id="@+id/buttonA" ... />
<Button android:id="@+id/buttonB" ...
		app:layout_constraintLeft_toRightOf="@+id/buttonA" />

这告诉系统我们希望按钮B的左侧被约束到按钮A的右侧。这样的位置约束意味着系统将尝试让双方共享相同的位置。

图2 - 相对定位约束

以下是可用约束的列表(上图):

  • layout_constraintLeft_toLeftOf
  • layout_constraintLeft_toRightOf
  • layout_constraintRight_toLeftOf
  • layout_constraintRight_toRightOf
  • layout_constraintTop_toTopOf
  • layout_constraintTop_toBottomOf
  • layout_constraintBottom_toTopOf
  • layout_constraintBottom_toBottomOf
  • layout_constraintBaseline_toBaselineOf
  • layout_constraintStart_toEndOf
  • layout_constraintStart_toStartOf
  • layout_constraintEnd_toStartOf
  • layout_constraintEnd_toEndOf

它们都引用id另一个小部件,或者parent引用父容器,即ConstraintLayout:

<Button android:id="@+id/buttonB" ...
		app:layout_constraintLeft_toLeftOf="parent" />

边距

图3 - 相对定位边距

如果设置了边距,则它们将应用于相应的约束(如果存在)(上图),将边距强制为目标和源边之间的空间。通常的布局边距属性可用于此效果:

  • android:layout_marginStart
  • android:layout_marginEnd
  • android:layout_marginLeft
  • android:layout_marginTop
  • android:layout_marginRight
  • android:layout_marginBottom

请注意,保证金只能是正数或等于零,并且需要a Dimension。

连接到GONE小部件时的边距

当位置约束目标的可见性为View.GONE,您还可以使用以下属性指示要使用的不同边距值:

  • layout_goneMarginStart
  • layout_goneMarginEnd
  • layout_goneMarginLeft
  • layout_goneMarginTop
  • layout_goneMarginRight
  • layout_goneMarginBottom

居中定位和偏压

一个有用的方面ConstraintLayout是它如何处理“不可能”的约束。例如,如果我们有类似的东西:

<android.support.constraint.ConstraintLayout ...>
	<Button android:id="@+id/button" ...
			app:layout_constraintLeft_toLeftOf="parent"
			app:layout_constraintRight_toRightOf="parent/>
</android.support.constraint.ConstraintLayout>

图4 - 居中定位

在这种情况下发生的事情是,约束的作用就像是相反的力量将小部件拉平(图4); 这样小部件最终将在父容器中居中。这同样适用于垂直约束。

偏压

遇到这种相反的约束时的默认设置是使窗口小部件居中; 但是您可以使用偏差属性调整定位以使一侧偏向另一侧:

  • layout_constraintHorizontal_bias
  • layout_constraintVertical_bias

图5 - 偏置定心定位

例如,以下将使左侧具有30%的偏差而不是默认的50%,使得左侧将更短,小部件更倾向于左侧(如上图):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值