我对ConstraintLayout和RelativeLayout之间的区别感到困惑。有人能告诉我它们之间的确切区别吗?


当前回答

一个很大的区别是,即使视图消失了,ConstraintLayout仍然尊重约束。所以它不会破坏布局如果你有一个链你想让一个视图消失在中间。

其他回答

一个很大的区别是,即使视图消失了,ConstraintLayout仍然尊重约束。所以它不会破坏布局如果你有一个链你想让一个视图消失在中间。

由@davidpbr ConstraintLayout性能报告

我做了两个类似的7个子布局,每个都有一个父ConstraintLayout和RelativeLayout。 基于Android Studio方法跟踪工具,它似乎ConstraintLayout花更多的时间在onMeasure和执行额外的工作在onfinishinflation。

使用的库(support-v4, appcompat-v7…):

com.android.support.constraint: constraint-layout: 1.0.0-alpha1

设备/Android版本转载于: 三星Galaxy S6 (SM-G920A;对不起,没有Nexus atm)。Android 5.0.2

快速方法跟踪比较:

示例Github回购:https://github.com/OnlyInAmerica/ConstraintLayoutPerf

我能得出的结论是

1)我们可以在不接触xml部分代码的情况下进行UI设计,老实说,我觉得谷歌已经复制了iOS应用程序中的UI设计,如果你熟悉iOS中的UI开发,这将是有意义的,但在相对布局中,很难在不接触xml设计的情况下设置约束。

2)其次,它具有平面视图层次结构,不像其他布局,因此性能比相对布局更好,你可能已经从其他答案中看到

3)除了相对布局之外,它还有一些额外的东西,比如圆形相对定位,我们可以将另一个视图相对于这个视图以一定的半径和一定的角度放置,这在相对布局中是做不到的

我再说一遍,使用约束布局设计UI和在iOS中设计UI是一样的,所以以后如果你在iOS上工作,你会发现使用约束布局会更容易

正式来说,ConstraintLayout要快得多

在Android N版本中,ConstraintLayout类提供了与RelativeLayout类似的功能,但成本要低得多。

ConstraintLayout的目的是通过对每个视图应用一些规则来避免嵌套,从而优化和平抑布局的视图层次结构。

规则类似于RelativeLayout,例如将底边设置为其他视图的底部。

app:layout_constraintBottom_toBottomOf="@+id/view1"

与RelativeLayout不同的是,ConstraintLayout提供了一个偏置值,用于相对于手柄(用红圈标记)的0%和100%水平和垂直偏移来定位视图。这些百分比(和分数)提供了视图在不同屏幕密度和大小之间的无缝定位。

app:layout_constraintHorizontal_bias="0.33" <!-- from 0.0 to 1.0 -->
app:layout_constraintVertical_bias="0.53" <!-- from 0.0 to 1.0 -->

Baseline句柄(圆角的长管道,在圆句柄的下面)用于将视图的内容与另一个视图引用对齐。

正方形句柄(在视图的每个角落)用于在dps中调整视图的大小。

这完全是基于个人观点和我对ConstraintLayout的印象