226

我只是在 xml 中构建一些 UI,Lint 给了我一个警告并说将 android:baselineAligned 设置为 false 以提高 ListView 中的性能。

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

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

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

4

3 回答 3

171

通过设置android:baselineAligned="false",您可以防止应用程序的布局为了对齐其子项的基线而必须做的额外工作;这可以明显提高性能。(UI 上不必要的操作更少 => 更好的性能)

于 2012-02-16T23:42:13.303 回答
22

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

我刚刚设法让 3 个项目(图标、文本、按钮)在水平 LinearLayout 中垂直居中。

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

在 LinearLayout 中指定 android:baselineAligned="false" 会关闭此功能,并且所有内容都正确居中。

于 2014-07-14T10:27:55.387 回答
16
// 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

于 2013-11-19T09:16:25.310 回答