RelativeLayout比LinearLayout贵吗?


114

由于它的灵活性,即使我只想显示非常简单的内容,我也总是在每次需要View容器时都使用RelativeLayout。

从性能/良好实践的角度来看,这样做是否可行,还是应该尝试使用LinearLayout?

谢谢!

Answers:


149

在Google I / O 2013(为Android编写自定义视图)上的一次演讲中,罗曼·盖伊澄清了导致所有人开始对所有内容使用RelativeLayouts的误解。RelativeLayout始终必须执行两次度量传递。总体而言,只要您的视图层次结构简单,就可以忽略不计。但是,如果您的层次结构复杂,那么进行额外的度量传递可能会相当昂贵。同样,如果嵌套RelativeLayouts,则会得到指数测量算法。

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=1m41s

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=38m04s


8
我知道这是一篇过时的文章,但是当您在单个相对布局和2-3个线性布局之间进行选择时,您认为哪一种解决方案成本最低?
Langkiller 2016年

5
一个ConstraintLayout :)
moyheen

52

除非您要布置很多视图(例如在ListView中),否则在LinearLayout或RelativeLayout之间进行选择的性能可以忽略不计。选择最适合工作的方式,只在需要时才考虑性能。

以下是有关创建高效布局的官方文档对RelativeLayout和LinearLayout的性能的评价:

不幸的是,坚持基本功能并不是创建用户界面的最有效方法。一个常见的例子是滥用LinearLayout,这导致视图层次结构中视图的扩散。添加到应用程序中的每个视图(或更糟糕的是,每个布局管理器)都是有代价的:初始化,布局和绘图变慢。当您嵌套几个使用weight参数的LinearLayout时,布局过程可能会特别昂贵,这需要对子对象进行两次测量。


3
可以忽略的理由是什么?我发现这其中指出RelativeLayout的成本更高,就像我怀疑bitbucket.org/spencerelliott/mercury/issue/1/...
max4ever

只是避免添加内部容器。
路易斯·佩纳

2

相对布局比线性布局更有效。

这里

常见的误解是使用基本布局结构会导致最有效的布局。但是,添加到应用程序中的每个小部件和布局都需要初始化,布局和绘图。例如,使用LinearLayout的嵌套实例可能会导致视图层次过深。此外,嵌套多个使用layout_weight参数的LinearLayout实例可能会特别昂贵,因为每个子项需要测量两次。当布局反复膨胀时,例如在ListView或GridView中使用时,这一点尤其重要。


2
@phreakhead没错,没有单一的“正确”解决方案。这就是为什么“正确”的解决方案几乎总是要完全忽略性能,而要做最容易写和读的事情。
凯文·克鲁姆维德

3
该报价不备份您的说法,这是只有在一种情况下真
弗洛我们

真正的事实是,在设计布局时,始终要尽量减少层次结构级别的数量(布局内部布局内的布局),并检查层次结构查看器工具以发现潜在的问题。
亚历山大·哈罗多·达·罗查

1

2018年更新:在N版本的Android中,ConstraintLayout该类提供与相似的功能RelativeLayout,但成本大大降低。它是非常强大的布局管理器,应在需要构建复杂的GUI时使用。


自最新版本以来,它变得非常慢
Dragos Rachieru

这取决于它的使用方式。您应避免绝对定位并使用约束。
akelec

-25

你可以试试

<LinearLayout>
       <ViewPager/><!--Loading images from net, it is very good as a testing case.-->
       <ViewPagerIndicator/>
       <TextView/> <!--Show some info about page-->
</LinearLayout>

<RelativeLayout>           
       <ViewPager/><!--Loading images from net, it is very good as a testing case.-->
       <ViewPagerIndicator below="id of ViewPager"/>
       <TextView below="id of ViewPagerIndicator"/> <!--Show some info about page-->
</RelativeLayout>

如果您的专页从互联网上加载了一些图片,您会发现有很多不同之处。在这种情况下,LinearLayout比RelativeLayout好100%。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.