每次我需要一个 View 容器时,我总是使用 RelativeLayout,因为它很灵活,即使我只是想显示一些非常简单的东西。
从性能/良好实践的角度来看,这样做可以吗,或者我应该尝试使用 LinearLayout 吗?
谢谢!
每次我需要一个 View 容器时,我总是使用 RelativeLayout,因为它很灵活,即使我只是想显示一些非常简单的东西。
从性能/良好实践的角度来看,这样做可以吗,或者我应该尝试使用 LinearLayout 吗?
谢谢!
在 Google I/O 2013(为 Android 编写自定义视图)的一次演讲中,Romain Guy 澄清了导致每个人都开始使用 RelativeLayouts 的误解。一个RelativeLayout 总是必须做两次测量传递。总的来说,只要您的视图层次结构简单,它就可以忽略不计。但是,如果您的层次结构很复杂,那么进行额外的度量传递可能会相当昂贵。此外,如果您嵌套 RelativeLayouts,您将获得指数测量算法。
除非您要布置大量视图(例如在 ListView 中),否则在 LinearLayout 或 RelativeLayout 之间进行选择的性能可以忽略不计。选择最方便使用的工作,只在需要时才考虑性能。
以下是有关创建高效布局的官方文档对RelativeLayout 和 LinearLayout 性能的评价:
不幸的是,坚持基本功能并不是创建用户界面的最有效方式。一个常见的例子是滥用 LinearLayout,这导致视图层次结构中的视图激增。添加到应用程序中的每个视图——或者更糟糕的是,每个布局管理器——都是有代价的:初始化、布局和绘图变得更慢。当您嵌套多个使用权重参数的 LinearLayout 时,布局传递可能会特别昂贵,这需要对子元素进行两次测量。
Relativelayout is more effective than Linearlayout.
From here:
It is a common misconception that using the basic layout structures leads to the most efficient layouts. However, each widget and layout you add to your application requires initialization, layout, and drawing. For example, using nested instances of LinearLayout can lead to an excessively deep view hierarchy. Furthermore, nesting several instances of LinearLayout that use the layout_weight parameter can be especially expensive as each child needs to be measured twice. This is particularly important when the layout is inflated repeatedly, such as when used in a ListView or GridView.
2018 更新:在 Android 的 N 版本中,ConstraintLayout
该类提供与 类似的功能RelativeLayout
,但成本显着降低。它是一个非常强大的布局管理器,应该在需要构建复杂的 GUI 时使用。
你可以试试
<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%。