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

时间:2012-02-16 22:14:34

标签: android listview android-lint

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

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

  

布局性能:使用您应该的权重查找LinearLayouts   设置android:baselineAligned =“false”以获得更好的性能,以及   查找具有可导致性能的嵌套权重的情况   问题。

有人可以解释为什么这会改善表现,特别是涉及体重时?

3 个答案:

答案 0 :(得分:153)

通过设置android:baselineAligned="false",您可以阻止应用布局必须执行的额外工作,以便对齐其子级的基线;这显然可以提高性能。 (在UI上执行不必要的操作=>更好的性能)

答案 1 :(得分:19)

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

  

我只是设法让3个项目(图标,文字,按钮)居中   垂直在水平LinearLayout。

     

这看起来很简单,但实际上却指明了   机器人:比重=" center_vertical"因为LinearLayout属性不是   足够 - 图标居中,但文字和按钮不居中。这是   因为(推测)文本有基线和居中算法   使用它而不是真实的'垂直中心。但更糟糕的是 - 按钮   (文本旁边)使用文本的基线进行居中!

     

指定android:baselineAligned =" false"在LinearLayout转为此   关闭,一切正确。

答案 2 :(得分:14)

// 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