ConstraintLayout
让你能够在很平的view结构(没有多层布局嵌套)中构建一个复杂的布局结构. 有点像RelativeLayout
, 全部的view都是根据它和兄弟View和父layout的关系布局的, 可是它比RelativeLayout
要更加灵活, 在Layout Editor中也更加好用.html
在Layout Editor中你能够直接靠拖拽来构建ConstraintLayout
.android
为了在ConstraintLayout
中定义一个view的位置, 你必须给view加上两条或多条约束(constraints). 每一条约束表明了一种和其余View(或parent, 或不可见的guideline)之间的联系或者对齐关系.git
每一条约束都规定了这个view沿着水平或竖直轴的一个位置, 因此每一个View在每一个轴上都必须至少有一条约束(可是一般须要更多).github
首先确认下载support库, 在Tools > Android > SDK Manager
的SDK Tools
tab下:
展开Support Repository
, check ConstraintLayout for Android
和Solver for ConstraintLayout
.
Check Show Package Details
, 显示版本信息.ide
好比当前我最新的版本信息是1.0.0-beta4, 我在module的build.gradle中添加:布局
dependencies { compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' }
而后点击Sync便可.gradle
咱们能够新建布局, 而后让它的根节点是android.support.constraint.ConstraintLayout
.ui
除此以外, 咱们还能够直接转换已有布局.
打开Layout, 切换到Design
tab, 而后在Component Tree
窗口, 右击布局而后选择最底部的Convert XXXLayout(这里是你布局节点的类型) to ConstraintLayout
.3d
在Design模式下, 从Palette窗口中拖一个View到editor中去. 当你把一个View加入到ConstraintLayout中以后, 它会展现出一个bounding box, 四角的四个小方块用来拖拽调节大小, 每个边上都有一个小圆点用来创建约束.
这些小方块和小圆点都被称为handles
.code
点击View, 而后点击并拖住一个约束handle, 把它拖拽到一个可用的anchor point(另外一个View的边缘, layout的边缘, 或者一个guideline).当你松手的时候, 约束就生效了. (有一个默认的margin)
有几个规则:
要删掉一个约束, 只须要选择这个view, 点击那个对应的handle.
若是你给同一个View加了两个相反的约束, 约束的线条就会变成弹簧状, 来显示两个相反方向的约束. 当View内容的尺寸固定或者是wrap的时候, 在这种状况下View就会在两个约束下居中显示, 若是你想让它展开, 那么就应该修改它的尺寸为Any Size; 若是你想要保持当前的尺寸, 你能够调节约束的权重.
一般状况下能够加的有这几种约束:
当打开Autoconnect
模式以后, 每个新加的View都会自动建立约束. Autoconnect模式默认是关闭的.
点击Infer Constraints
会给layout中当前全部的View建立约束, 这是一个一次性的action. 它会选择创建最有效的约束, 因此它可能会创建离得很远的两个view之间的约束. 不像Autoconnect模式开启下, 只给新加的View创建约束, 而且只选择最近的元素.
能够经过拖拽View四个角的handles来改变View的大小, 可是这样生成的是hard-coded的尺寸, 对于适配来说这样是很差的.
你能够点击View而后在Properties窗口编辑尺寸.
有三种尺寸模式:
>>>
图形表示.|-|
表示, 固定尺寸.能够经过点击图形符号来切换这些模式.
注意: 在ConstraintLayout
中的View中不该该使用match_parent
, 而是用"Any Size"(0dp).
当你给一个View的对立两边都添加了约束, 而View的尺寸是fixed或者wrap_content, 那么默认状况下View就会居中显示在两个anchor point之间(bias=50%).
你能够经过拖拽View或者在Properties窗口中拖拽bias slider来改变它的偏移权重.
能够在toolbar上点击默认边距(8)来修改.
注意这个修改只对修改后新添加的View生效.
每个View的边距均可以经过Properties窗口修改: 点击约束线条上的margin数字.
注意提供的值都是8的倍数, 以确保你遵循了Material Design的建议.