我刚在xml中构建一些UI元素时,Lint给了我一个警告,建议将android:baselineAligned设置为false以提高ListView的性能。
添加此警告的Lint更改文档说明如下
布局性能:查找LinearLayouts中带有权重的情况,您应该将android:baselineAligned="false"设置为获得更好的性能,并且还会查找嵌套权重可能导致性能问题的情况。
有人能解释一下为什么这样做可以提高性能,特别是当涉及到权重时?
我刚在xml中构建一些UI元素时,Lint给了我一个警告,建议将android:baselineAligned设置为false以提高ListView的性能。
添加此警告的Lint更改文档说明如下
布局性能:查找LinearLayouts中带有权重的情况,您应该将android:baselineAligned="false"设置为获得更好的性能,并且还会查找嵌套权重可能导致性能问题的情况。
有人能解释一下为什么这样做可以提高性能,特别是当涉及到权重时?
android:baselineAligned="false"
,您可以防止应用程序布局必须执行的额外工作,以使其子项的基线对齐; 这显然可以提高性能。(UI上减少不必要的操作=> 更好的性能)android:baselineAligned="false"
如何帮助呢?这不一定是答案,但有助于理解概念。
我刚刚成功使得在水平LinearLayout中垂直居中3个元素(图标、文本和按钮)。
这看起来可能很简单,但实际上,指定LinearLayout属性为android:gravity="center_vertical"是不够的 - 图标被居中了,但文本和按钮没有。这是因为(可能是)文本有一个基线,而居中算法使用它来代替“真正”的垂直中心。但更糟糕的是,按钮(紧跟着文本)使用文本的基线居中!
在LinearLayout中指定android:baselineAligned="false"可以关闭此功能,然后一切都会正确居中。
// 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);
}