ConstraintLayout的普及让Android的开发者们能更方便地进行布局,但如何在代码中设置ConstraintLayout的约束呢?网上的资料不太详细,在这里归纳总结一下。 

ConstraintSet

   这个类在官方文档上是这样描述的:

This class allows you to define programmatically a set of constraints to be used with ConstraintLayout.

For details about Constraint behaviour see ConstraintLayout. It lets you create and save constraints, and apply them to an existing ConstraintLayout. ConstraintsSet can be created in various ways:

  • Manually 
    c = new ConstraintSet(); c.connect(....);
  • from a R.layout.* object 
    c.clone(context, R.layout.layout1);
  • from a ConstraintLayout 
    c.clone(clayout);

  此类允许你在代码中定义与ConstraintLayout一起使用的约束。而使用这个类的方法非常简单,你需要新建这个类,并操作这个类:

  c = new ConstraintSet(); c.connect(....);

  或者先从你的布局中把布局约束先克隆出来,再操作这个布局约束的克隆体:

c.clone(context, R.layout.layout1);

或者

c.clone(clayout);

这里有个地方一定要注意,你克隆出来的布局约束是“克隆的”,你之后对这个克隆约束的任何改变都是建立在之前的约束之上的,如果你要清空之前的约束,可以使用

   c.clear(int viewId)

 

 回到之前,把ConstraintSet克隆或者创建出来之后,我们该如何对这个对象进行设置操作呢?举个例子,如果我想让textView的右边界向整个父容器的右边界对齐,那么我可以这样写:

c.connect(textView.getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT);

  如果我想在右边界添加间隔呢?可以这样写:

   c.connect(textView.getId(),ConstraintSet.RIGHT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,10);

  这个时候我如果再想将它的上边界约束向button的下边界对齐呢?

   c.connect(textView.getId(),ConstraintSet.TOP,button.getId(),ConstraintSet.BOTTOM);

  我们再回头看看这个方法吧:

connect(int startID, int startSide, int endID, int endSide, int margin)

  startID就是你要约束的控件ID,startSide为他要约束的边界,而endID则是你的约束条件控件的ID,endSide为它的边界,margin自然就是间隔了。跟ConstraintLayout在xml中的约束不同,ConstraintSet的约束操作只用了这个方法——connect。

  同时,ConstraintSet还能方便地设置你控件的宽高,使用

constrainHeight(int viewId, int height)
constrainWidth(int viewId, int width)

这两个方法即可。

    当我们设置好控件的约束,如何将该约束应用呢?同样非常简单:

  c.applyTo(mConstraintLayout);

  只需要一行代码就能搞定。 

 

ConstraintSet的设置方法还有许多,基本上能在XML里定义的都有,这里就不一一列举了,在最后给上官方文档地址,供各位查询ConstraintSet官方说明

更多相关文章

  1. ConstraintLayout学习笔记
  2. Android中动态设置TextView的drawableLeft和drawableRight的时候
  3. 利用手势放大图片,并限制图片不超过边界,一般用于大图查看
  4. Error:(27, 13) Failed to resolve: com.android.support.constr
  5. android listView 到上下边界 蓝色或黄色阴影去除方法
  6. LinearGradient
  7. Android(安卓)ConstraintLayout完全解析
  8. Android(安卓)ConstraintLayout 布局解析
  9. ConstraintLayout子View设置match_parent后约束失效

随机推荐

  1. 主流智能手机屏幕材质介绍
  2. 我常用的 Android(安卓)软件
  3. android 各种常用,不易记的dialog,对话框
  4. Android(安卓)ActionBar与Menu - 1 - api
  5. [011] 百度地图API之POI搜索-发现你身边
  6. php运行原理、混编方式、常用数据类型
  7. Android中的动画详析-kotlin的demo
  8. 基于线程池和NIO技术构建高效的多协议And
  9. Android(安卓)优化OTA包大小和开机启动时
  10. android UI进阶之用gallery实现可滑动的T