如何将baselineAligned设置为false来提高LinearLayout的性能?

我只是在xml中创build了一些UI,而Lint给了我一个警告,并说要设置android:baselineAligned为false来提高ListView的性能。

添加此警告的Lint更改的文档说

布局性能:查找带有权重的LinearLayouts,您应该在其中设置android:baselineAligned =“false”以获得更好的性能,并且还会发现嵌套权重可能导致性能问题的情况。

有人可以解释为什么这会提高性能,特别是当涉及重量?

通过设置android:baselineAligned="false" ,您可以防止您的应用程序的布局需要做额外的工作,以便使其子基线alignment; 这可以明显提高性能。 (在UI上更less的不必要的操作=>更好的性能)

如何android:baselineAligned="false"帮助。 这可能不是答案,但有助于获得概念。

我刚刚设法得到3个项目(图标,文本,button)垂直居中水平LinearLayout。

这可能看起来很简单,但实际上指定android:gravity =“center_vertical”作为LinearLayout属性是不够的 – 图标居中,但文本和button不是。 这是因为(大概)文本有一个基准,并且居中algorithm使用它而不是“真正的”垂直中心。 但更糟糕的是,button(文本旁边)是使用文本的基线居中的!

在LinearLayout中指定android:baselineAligned =“false”将closures此function,并且所有内容都正确居中。

 // Baseline alignment requires to measure widgets to obtain the // baseline offset (in particular for TextViews). The following // defeats the optimization mentioned above. Allow the child to // use as much space as it wants because we can shrink things // later (and re-measure). if (baselineAligned) { final int freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); child.measure(freeSpec, freeSpec); } 

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/LinearLayout.java#L1093