Android新布局ConstraintLayout的使用

本文介绍了Android的ConstraintLayout,一种提升开发效率的布局方式。通过约束的类型、偏置约束、锚向指示线和View尺寸的设定,详细阐述了如何使用ConstraintLayout创建灵活的UI。同时,文章提到了约束布局不支持match_parent,但可通过Any Size实现类似效果,并利用layout_constraintDimensionRatio属性实现宽高比设置。
摘要由CSDN通过智能技术生成

在2016年的Google I/O大会中,Google为Android开发者带来了新的福利——ConstraintLayout(约束布局)和layout editor(布局编辑器)。使用ConstraintLayout,能够让我们应用的布局更加“扁平化”,提升我们的开发体验。而layout editor是Android Studio 2.2新增的一个可视化布局工具,使用它可以通过拖动UI控件来进行“约束布局”,还可以实时显示ConstraintLayout的布局效果。

译者注:使用ConstraintLayout并不需要Android Studio 2.2或以上版本,但是要使用layout editor需要将Android Studio先升级到2.2或以上版本。使用ConstraintLayout需要我们添加如下依赖:

compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha4'

本篇文章会介绍如何使用ConstraintLayout的各种特性。在下篇文章中,我们会分析ConstraintLayout的工作原理,理解了工作原理,我们对它的运用也会更加得心应手。

先让我们从约束(constraint)是什么开始...

约束的类型

根据官方的介绍,一个对View的约束描述的是"View在布局中相对于其他元素的位置是怎样的"。在一个约束关系中,至少有两个主角,一个我们称之为source(源),另一个我们称之为target(目标)。其中source的位置依赖于target。我们可以这样理解:约束以某种方式将source与target连接了起来,这样source相对于target的位置便是固定的了。 我们可以将source和target看作是位于View上的点,称之为“锚点(anchor point)”。ConstraintLayout中的每个View都支持将如下锚点作为约束关系中的source或target:

  • top, bottom, left(start), right(end)

  • centerX, centerY

  • baseline

在XML文件中,是这样描述一个约束的:

layout_constraint[SourceAnchor]_[TargetAnchor]="[TargetId]"

上面的描述可能比较抽象,我们来看一个例子。这个例子建立了button_cancel的最右端(end)和button_next的最左端(start)的约束。相应的XML文件如下:

<Button 
  android:id="@+id/button_cancel" 
  … />

<Button 
  android:id="@+id/button_next"   
  app:layout_constraintStart_toEndOf="@+id/button_cancel" 
  … />


上面的描述的约束会使得button_cancel和button_next布局在同一水平线上,并且button_next位于button_cancel的右边。

在定义一个约束时,我们需要注意为约束关系中涉及到的View指定一个id属性,ConstraintLayout通过id属性才能定位到约束关系中的target或是source。

我们来看一个完整的描述约束关系的XML文件:


<ConstraintLayout
  xmlns:android="..."
  xmlns:app="..."    
  android:id="@+id/constraintLayout"
  android:layout_width="match_parent" 
  android:layout_height="match_parent">  <Button 
    android:id="@+id/button_cancel" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" *  
    app:layout_constraintStart_toStartOf="@+id/constraintLayout"
    android:layout_ma
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值