constraint layout 约束布局,percent layout的终结者

来源:互联网 发布:java远程读取电脑文件 编辑:程序博客网 时间:2024/06/02 05:18
创建约束布局一定要遵循下面的规则

1、每个view必须具有至少两个约束:一个水平的和一个竖直的。
2、只允许在同一平面(方向)上创建约束,所以一个view的竖直平面(也就是左右边界)只能与另一个竖直平面建立约束,baseline只能与baseline建立约束。
3、view上的每个约束手柄只能建立一个约束,但可以建立多个约束到锚点。也就是说出发的点只有一个,但是多个出发点可以连接到一个目标点。

对齐

当前view与其它view创建同侧的约束即可实现相应的对齐效果,如果要实现居中对齐,就建立双侧的约束。

建立到指导线的约束

工具栏中点击GuideLines,选择添加竖直方向或者水平方向的指导线,可以在layout中放置基于dip 或百分比为单位的指导线(点击指导线上面的小圆点来切换指导线的位置模式)

建立到容器的约束

工具栏中点击GuideLines,选择添加竖直方向或者水平方向的容器,在左侧的组件树中选择要加入容器的view,然后拖动至目标容器中。
左侧组件树中选择容器,可以在右边看到容器的属性面板,可用于更改容器方向

容器和指导线相似,但它没有自己的固定位置,它跟随自己最边界的内容 view 移动,其它view可以建立约束到容器边界,这样一个view就可以建立到一组view 的约束,而不是只能建立到特定view的约束。

调整约束偏移量

当建立左右或者上下约束后,同时view的size是固定的或者是wrap_content ,view就默认位于容器的正中,左右两个约束个保留50%的偏移,此时可以在右侧属性窗口中点击偏移滑块来调整左右的偏移量,上下同理。

view 的大小调整

1 size ratio
 2 delete constraint
3 height/width mode 
4 margins
5 constraint bias
可以用view顶点的手柄调整view 的大小,但是此举会固化尺寸大小,不利于屏幕适配。我们要选择不同的尺寸模式 click a view and open theAttributes 
点击3所示的位置会切换尺寸模式
  •  Fixed: 设置固定尺寸
  •  Wrap Content: 根据内容自动伸展大小.
  •  Match Constraints: The view expands as much as possible to meet the constraints on each side (在计算完边距之后).

值得注意的是,在constraint layout中,不能使用match_parent属性,只能使用 match constraints

设置view 的长宽比

当view的长宽至少有一个设置为match contraints时,就可以设置它的长宽比,点击上图中1所示的位置,输入框中就会显示当前的长宽比。
但是如果长宽都设置为了 match contraints,点击1所处的位置就可以切换比例的基数为长或者为宽。

调整view的边距

点击工具栏中的默认边距按钮,选择默认边距,操作只会对之后添加到layout中的view有效。
也可以点击上图中4所示的位置单独为view设置边距,默认设置为8dp是为了迎合Material Design

用链表控制和操作线性view group

一组view 通过双向的约束来连接彼此,就形成了“链”,个人称之为链表
一个链表通过以下方式来分配组内的空间
1、Spread 组中各个view平均分配空间(在计算完边距之后),这也是默认的方式。
2、Spread inside 链表的两端紧贴着约束边界,其它的view平均分配组内空间
3、Weighted :当链表模式设置为Spread或者Spread inside时可以设置一个或者多个view的尺寸为match constraints 来平均分配剩余空间。另外还可用 layout_contraintHorizontal_weight 和 layout_contraintVertical_weight 属性来指定分配空间时的优先级和大
4、packed:组中所有view挤在一块,这时可以调整整个链表的偏移量,左右或者上下的偏移量。

链表的头view 也就是水平链表的最左view,竖直链表的最上view 定义整个链表的样式,但是你可以选中链表中的任意view 然后点击链表按钮在以上四种模式中来回切换链表模式。

最重要的,如果创建一个链表: 选中目标Views 右击,选择Chain ->Center Horizontally 或者 Chain ->Center Vertically.


此外,一个view 可以是水平链表的一部分,也可以同时是竖直链表的一部分;
只有在链表的头尾约束到同一个轴上时,此链表才会正常工作。

原创粉丝点击