¿Cómo mejora el rendimiento en LinearLayout la configuración de baselineAligned a false?


Solo estaba construyendo una interfaz de usuario en xml, y Lint me dio una advertencia y me dijo que estableciera android:baselineAligned en false para mejorar el rendimiento en ListView.

Los documentos para los cambios de Pelusa que agregaron esta advertencia dicen

Rendimiento de diseño: Encuentra LinearLayouts con pesos donde debe establecer android: baselineAligned="false" para un mejor rendimiento, y también encuentra casos en los que tiene pesos anidados que pueden causar rendimiento problema.

Puede ¿alguien explica por qué esto mejora el rendimiento, específicamente cuando se trata de peso?

Author: Bananeweizen, 2012-02-17

3 answers

Al establecer android:baselineAligned="false", está evitando el trabajo adicional que el diseño de su aplicación tiene que hacer para alinear las líneas de base de sus hijos; lo que obviamente puede aumentar el rendimiento. (Menos operaciones innecesarias en UI => Mejor rendimiento)

 145
Author: ItsNotAboutTheName,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-18 05:17:18

Cómo ayuda android:baselineAligned="false". Puede que no sea la respuesta, pero ayuda a conseguir el concepto.

Acabo de conseguir 3 elementos (icono, texto, botón) centrado verticalmente en LinearLayout horizontal.

Esto puede parecer simple, pero en realidad especificando android: gravity= "center_vertical" como LinearLayout atributo no es suficiente-el icono está centrado, pero el texto y el botón no lo están. Esto es porque (presumiblemente) el texto tiene una línea de base y un algoritmo de centrado utiliza en lugar de 'real' centro vertical. Pero lo que es peor-botón (que viene junto al texto) se centra utilizando la línea de base del texto!

Especificar android: baselineAligned= "false" en LinearLayout convierte esto apagado, y todo se centra correctamente.

 16
Author: Xar E Ahmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-21 12:32:44
// 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

 14
Author: boiledwater,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-19 12:19:06