由于它的灵活性,即使我只想显示非常简单的内容,我也总是在每次需要View容器时都使用RelativeLayout。
从性能/良好实践的角度来看,这样做是否可行,还是应该尝试使用LinearLayout?
谢谢!
由于它的灵活性,即使我只想显示非常简单的内容,我也总是在每次需要View容器时都使用RelativeLayout。
从性能/良好实践的角度来看,这样做是否可行,还是应该尝试使用LinearLayout?
谢谢!
Answers:
在Google I / O 2013(为Android编写自定义视图)上的一次演讲中,罗曼·盖伊澄清了导致所有人开始对所有内容使用RelativeLayouts的误解。RelativeLayout始终必须执行两次度量传递。总体而言,只要您的视图层次结构简单,就可以忽略不计。但是,如果您的层次结构复杂,那么进行额外的度量传递可能会相当昂贵。同样,如果嵌套RelativeLayouts,则会得到指数测量算法。
除非您要布置很多视图(例如在ListView中),否则在LinearLayout或RelativeLayout之间进行选择的性能可以忽略不计。选择最适合工作的方式,只在需要时才考虑性能。
以下是有关创建高效布局的官方文档对RelativeLayout和LinearLayout的性能的评价:
不幸的是,坚持基本功能并不是创建用户界面的最有效方法。一个常见的例子是滥用LinearLayout,这导致视图层次结构中视图的扩散。添加到应用程序中的每个视图(或更糟糕的是,每个布局管理器)都是有代价的:初始化,布局和绘图变慢。当您嵌套几个使用weight参数的LinearLayout时,布局过程可能会特别昂贵,这需要对子对象进行两次测量。
相对布局比线性布局更有效。
从这里:
常见的误解是使用基本布局结构会导致最有效的布局。但是,添加到应用程序中的每个小部件和布局都需要初始化,布局和绘图。例如,使用LinearLayout的嵌套实例可能会导致视图层次过深。此外,嵌套多个使用layout_weight参数的LinearLayout实例可能会特别昂贵,因为每个子项需要测量两次。当布局反复膨胀时,例如在ListView或GridView中使用时,这一点尤其重要。
2018年更新:在N版本的Android中,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%。