概述
ConstraintLayout
是一种构建于弹性 Constraints
(约束)系统的新型 Android Layout
,使用方法和 RelativeLayout
类似,但是比它更灵活和更容易使用。
依赖包
1 | To use ConstraintLayout in your project, proceed as follows: |
现在 Android Studio 2.3
工具默认新建的 layout
就是 ConstraintLayout
,作为官方标配。而且支持将其他官方 layout
一键直接转换为 ConstraintLayout
。
View
的尺寸
三种值
与其他 Layout
不同之处在于,它的 layout_width
和 layout_height
不支持设置 match_parent
,其属性取值只有以下三种情况:
- wrap_content
- 指定具体dp值
- 0dp(match_constraint,any size)
0dp 的用途
代表填充约束之意(any size
),注意不要以为和 match_parent
是一样的;match_parent
是用于填充满当前控件的父布局,而 any size
是用于填充满当前控件的约束规则。
- 填充屏幕宽度
1 | <Spinner |
- 设置特定的宽高比
1 | <ImageView |
链(chain)
Chain
链是一种特殊的约束,让多个 chain
链连接的 Views
能够平分剩余空间位置。和 LinearLayout
中的权重比 weight
很相似 ,但 Chains
链能做到的远远不止权重比 weight
的功能。
创建链
选择多个想要链接到一起的 Views
,然后再右键选择 Center Horizontally
或者 Center Vertically
来创建水平链或者垂直链。如下,创建一个水平链:
链的模式
- spread chain
Chain
链的默认模式就是spread
模式,它将平分间隙让多个Views
布局到剩余空间
- spread inside chain
spread inside
模式,它将会把两边最边缘的两个View
到外向父组件边缘的距离去除,然后让剩余的Views
在剩余的空间内平分间隙布局
- packed chains
packed
模式将所有Views
打包到一起不分配多余的间隙(当然不包括通过margin
设置多个Views
之间的间隙),然后将整个组件组在可用的剩余位置居中。在packed chain
链模式,打包在一起的Views
组可以进一步通过控制修改bias
值来控制打包组的位置,如bias
模式是0.5
将Views
组居中。
链的权重
spread
和 spread inside
链可以设置每个组件的 weight
权重,类似于 LinearLayout
的 weight
权重。当前 AS
版本不能直接在视图编辑器设置这个权重,需要在 XML
文件中手动设置。
假设该 View
是在一个水平的 Chain
链中,在 XML
中设置
1 | android:layout_width="0dp" |
注意:在
packed
链模式下设置权重weight
并没有作用。
就是说并不像 spread
和 spread inside
模式中表现的占据尽可能的剩余空间,在 packed
模式下该组件就会被收缩成 0
大小。
示例
三个 ListView
水平并列排列,使用默认的链模式
1 | <ListView |
对应生成的效果图: