1、ConstraintLayout(约束布局) 创建的意义

  • 1、是为了解决创建一个庞大而复杂的视图层
  • 2、是为了创建布局更加简化,做到可以无技术的开发布局,完全手工拖拽不需要编写xml代码
  • 3、ConstraintLayout兼容2.3以上的所有版本

2、约束概述

  1. 要定义视图的位置ConstraintLayout,必须添加两个或者更多的约束条件。每一个约束都是其他的view,the parent layout(在ConstraintLayout中),有一种无形的连接。每个约束都制约着视图的水平位置和垂直位置,所以每个视图就是每个轴的最小约束。
  2. 如果只是添加了一个视图在layout中,那是没有添加约束的。没有约束时,当运行layout在设备上时它会显示在左上角[0,0]坐标处,因为他没有约束。
  3. 虽然缺少约束但是不会造成 编译错误

3、使用 ConstraintLayout 到项目中

  1. 确保你有最新的约束布局库文件
  1. 点击 tools->Android->SDK manage
  2. 点击sdk tools选项卡,就是中间的那一项
  3. 查看是否扩展库文件
  4. 点击ok
  5. 添加
    dependencies {
    compile ‘com.android.support.constraint:constraint-layout:1.0.0-alpha8’
    }
  6. 同步project和gradle文件
  1. 切换布局文件,把LinearLayout或者其他的目前的layout都可以自己点击转换
  1. 把布局管理器切换到Design(设计)状态下
  2. 在组件树窗口中,右键单击该布局并单击转换布局,以ConstraintLayout
  1. 创建一个约束布局
  1. 在项目窗口中单击任意位置,然后选择 layout文件 > New > XML > Layout XML.
  2. 为 布局输入文件名,然后输入“android.support.constraint.ConstraintLayout”为根标签
  3. 单击finish
  1. 创建好布局之后就是添加约束
  1. 穿件约束时,请记住一下规则
  2. 每个视图必须至少有两个制约因素:一横一纵
  3. 每个约束手柄 只能有一个约束,但可以在同一锚点创建多个约束。就是一个小圆圈只能穿件一个约束。
  4. 要删除一个约束,选择视图 ,单击约束句柄
  5. 如果一个视图添加相对约束,约束线成为波浪像弹簧一样,表示位置的力,
  6. 大幅度
  7. 基本的约束
  1. layout约束,也就是parent约束,相对于ConstraintLayout,下图中左侧被连接到母体布局的左边缘
  2. 位置约束,相对于其他view之间的约束,下图中Button被约束在ImageView的24dp下方
  3. 水平对齐约束
  4. 偏移对齐约束
  5. 基线对齐约束
  6. 约束指南,可以穿件水平指引线或者垂直指引线,(创建方法:点击蓝图右击选择 ADD Vertical GuideLine,或者ADD horizontal GuideLine),或者是在上边的标题栏上有选择 按钮。
  7. 使用自动连接或者推断约束
    自动连接:自动创建两个或多个约束视图在布局中,自动连接默认情况下禁用。可以单击(Turn on AutoConnect)这个图标进行打开。
    推断约束:
    点击这按钮打开
  8. 调整视图大小

    (1)视图的大小,(2)空间,和 (3)约束偏移。

灰色方块代表选定的视图。平方内的符号表示如下的高度和宽度设置:
包装内容:根据需要,以适应其内容的视图扩展完全吻合。
任何尺寸:视图扩展正是因为需要匹配的约束。实际值是0dp因为视图没有期望的尺寸,但它调整大小为需要满足的约束。然而,如果给定的尺寸只有一个约束,那么该视图扩展以适应其内容。想起来了另一种方式是“匹配的约束”(代替match_parent),因为它扩大了尽可能多的占每个约束和利润率的限制后视图。
修正:你在下面列出或通过调整在编辑器中查看文本框的尺寸。

9. 调整约束偏移
当您添加约束到视图的两侧(和同尺寸的视图大小或者是“固定”或“包装内容”),视图成为默认的两个定位点之间的中心。当一个视图居中,偏压为50%。您可以通过拖动在偏置滑块调节偏置属性窗口或通过拖动视图

总结:第一次翻译,用了半天左右,有些自己也没懂,所以翻译的不是很清楚,但是我觉得无关紧要了,这里面我觉得最好的功能就是那个指引线约束,也就是第6点,这个布局以后可以直接交给美工了,他再也不需要知道怎么写代码了,每个都可以直接使用拖拽式开发。若是一个程序员的话,用这个方法显得麻烦。个人的拙见,一个会ps的UI,很容易上手给我们做页面,这也是google为了分工更加明确,毕竟现在的app代码动辄都是几十万行,工程很庞大,所以也是有点让手机分出前后端的意思吧。