Je construisais simplement une interface utilisateur au format xml, et Lint m'a averti et a dit de définir Android: baselineAligned sur false pour améliorer les performances dans ListView.
Les docs pour les changements de peluches qui ont ajouté cet avertissement disent
Mise en forme: recherche LinearLayouts avec des poids pour lesquels vous devez définir Android: baselineAligned = "false" pour de meilleures performances, et recherche également les cas où vous avez des poids imbriqués pouvant entraîner des problèmes de performances.
Quelqu'un peut-il expliquer pourquoi cela améliore les performances, en particulier lorsque le poids est impliqué?
En mettant Android:baselineAligned="false"
, vous empêchez le travail supplémentaire que la mise en page de votre application doit faire pour aligner les lignes de base de ses enfants; ce qui peut évidemment augmenter la performance. (Moins d'opérations inutiles sur l'interface utilisateur => Meilleures performances)
comment Android:baselineAligned="false"
Aidez-moi . Ce n'est peut-être pas la solution, mais aide à comprendre le concept.
J'ai juste réussi à obtenir 3 éléments (icône, texte, bouton) centrés verticalement dans LinearLayout horizontal.
Cela peut sembler simple, mais en réalité, spécifier Android: gravity = "center_vertical" comme attribut LinearLayout ne suffit pas - l'icône est centrée, mais le texte et le bouton ne le sont pas. Ceci est dû au fait que (vraisemblablement) le texte a une ligne de base et que l'algorithme de centrage l'utilise à la place du centre vertical "réel". Mais ce qui est pire - le bouton (qui vient à côté du texte) est centré sur la ligne de base du texte!
Spécification d'Android: baselineAligned = "false" dans LinearLayout désactive cette option et tout est correctement centré.
// 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);
}