baselineAligned를 false로 설정하면 LinearLayout의 성능이 어떻게 향상됩니까? 레이아웃 성능

방금 XML로 UI를 작성하고 있었고 Lint는 경고를 표시하고 ListView의 성능을 향상시키기 위해 android : baselineAligned를 false로 설정했다고 말했습니다.

이 경고를 추가 한 Lint 변경에 대한 문서는

레이아웃 성능 : 성능 향상을 위해 android : baselineAligned = “false”를 설정해야하는 가중치가있는 LinearLayouts를 찾고 중첩 된 가중치가있어 성능 문제를 일으킬 수있는 경우도 찾습니다.

누군가 체중이 관련 될 때 왜 이것이 성능을 향상시키는 지 설명 할 수 있습니까?



답변

을 설정 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);
                }

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