将baselineAligned设置为false如何提高LinearLayout的性能?
Posted
技术标签:
【中文标题】将baselineAligned设置为false如何提高LinearLayout的性能?【英文标题】:How does setting baselineAligned to false improve performance in LinearLayout? 【发布时间】:2012-03-08 08:39:39 【问题描述】:我只是在 xml 中构建一些 UI,Lint 给了我一个警告并说将 android:baselineAligned 设置为 false 以提高 ListView 的性能。
添加此警告的 Lint 更改文档说
布局性能:查找具有权重的线性布局 设置 android:baselineAligned="false" 以获得更好的性能,并且 查找可能导致性能的嵌套权重的情况 问题。
有人可以解释为什么这会提高性能,特别是在涉及重量时?
【问题讨论】:
【参考方案1】:通过设置 android:baselineAligned="false"
,您可以防止应用布局为了对齐其子基线而必须做的额外工作;这可以明显提高性能。 (UI 上不必要的操作更少 => 更好的性能)
【讨论】:
那部分很明显。我试图理解的是,为什么这只是涉及重量时的性能改进? 基线一词来源于排版。它是文本中不可见的行字母。 en.wikipedia.org/wiki/Baseline_%28typography%29 因此,如果它是一种性能改进,这意味着通常完成的工作将不再完成。这有什么副作用?我们现在避免的工作是否有能力产生不同的结果? @lhunath 根据文档,默认设置为 true。这会强制任何 UI 文本的基线相互对齐。例如考虑按钮,您在同一行上有两个宽度/高度相同的按钮,但其中一个的文本较长,因为baselineAlined="true"
,文本较长的按钮最终可能会四处移动以使其文本与其他按钮。如需更好的示例,请查看this post
这里是视觉解决方案! ***.com/a/38007282/2959200【参考方案2】:
如何android:baselineAligned="false"
帮助。这可能不是答案,但有助于获得概念。
我刚刚设法让 3 个项目(图标、文本、按钮)居中 在水平 LinearLayout 中垂直。
这看起来很简单,但实际上指定 android:gravity="center_vertical" 作为 LinearLayout 属性不是 够了 - 图标居中,但文本和按钮不居中。这是 因为(大概)文本有一个基线和居中算法 使用它而不是“真正的”垂直中心。但更糟糕的是 - 按钮 (位于文本旁边)使用文本的基线居中!
在 LinearLayout 中指定 android:baselineAligned="false" 会变成这样 关闭,一切都正确居中。
【讨论】:
【参考方案3】:// 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
【讨论】:
以上是关于将baselineAligned设置为false如何提高LinearLayout的性能?的主要内容,如果未能解决你的问题,请参考以下文章
将按钮设置为disable之后同样会触发onclick时间,请问有没有啥解决方案?
如何将会话 cookie 的 HttpOnly 设置为 false?