【发布时间】:2011-05-03 09:54:57
【问题描述】:
每当我需要一个 View 容器时,我总是使用 RelativeLayout,因为它很灵活,即使我只是想显示一些非常简单的东西。
从性能/良好实践的角度来看,这样做是否可行,或者我是否应该尝试使用 LinearLayout?
谢谢!
【问题讨论】:
标签: android performance android-linearlayout android-relativelayout
每当我需要一个 View 容器时,我总是使用 RelativeLayout,因为它很灵活,即使我只是想显示一些非常简单的东西。
从性能/良好实践的角度来看,这样做是否可行,或者我是否应该尝试使用 LinearLayout?
谢谢!
【问题讨论】:
标签: android performance android-linearlayout android-relativelayout
在 Google I/O 2013(为 Android 编写自定义视图)上的一次演讲中,Romain Guy 澄清了导致每个人都开始使用 RelativeLayouts 的误解。一个RelativeLayout 总是必须做两次测量传递。总的来说,只要您的视图层次结构简单,它就可以忽略不计。但是,如果您的层次结构很复杂,那么进行额外的度量传递可能会相当昂贵。此外,如果您嵌套 RelativeLayouts,您将获得指数测量算法。
【讨论】:
除非您要布置大量视图(例如在 ListView 中),否则在 LinearLayout 或 RelativeLayout 之间进行选择的性能可以忽略不计。选择最方便使用的工作,只在需要时才考虑性能。
以下是关于Creating Efficient Layouts 的官方文档对RelativeLayout 和LinearLayout 性能的评价:
坚持基本功能是 不幸的是不是最有效的 创建用户界面的方法。一种 常见的例子是滥用 LinearLayout,这导致 视图中的视图扩散 等级制度。每一个视图——或者更糟, 每个布局管理器——你添加到 您的申请是有代价的: 初始化、布局和绘图 变慢。布局通行证可以是 筑巢时特别贵 几个使用的 LinearLayout 权重参数,这需要 孩子要测量两次。
【讨论】:
相对布局比线性布局更有效。
来自here:
使用基本布局结构会导致最有效的布局是一个常见的误解。但是,您添加到应用程序的每个小部件和布局都需要初始化、布局和绘图。例如,使用 LinearLayout 的嵌套实例会导致视图层次结构过深。此外,嵌套多个使用 layout_weight 参数的 LinearLayout 实例可能会特别昂贵,因为每个孩子都需要测量两次。这在布局反复膨胀时尤其重要,例如在 ListView 或 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%。
【讨论】: