Как установка baselineAligned значение false повышения производительности в элементе LinearLayout?
Я просто строил некоторый пользовательский интерфейс в xml, и Линт дал мне предупреждение и сказал, чтобы установить android:baselineAligned в false для повышения производительности в ListView.
документы для изменений корпии, которые добавили это предупреждение, говорят
производительность макета: находит LinearLayouts с весами, где вы должны установите android: baselineAligned= "false" для лучшей производительности, а также находит случаи, когда у вас есть вложенные веса, которые могут вызвать производительность проблемы.
может кто-нибудь объяснить, почему это улучшает производительность, особенно когда вес участвует?
3 ответа:
установка
android:baselineAligned="false"
, вы предотвращаете дополнительную работу, которую должен выполнять макет вашего приложения, чтобы выровнять базовые линии своих детей; что, очевидно, может увеличить производительность. (Меньше ненужных операций на UI = > лучшая производительность)
как
android:baselineAligned="false"
помочь . Это может быть не ответ, но помочь получить концепцию.Мне только что удалось получить 3 элемента (значок, текст, кнопка) по центру вертикально в горизонтальном LinearLayout.
Это может показаться простым, но на самом деле указание android: gravity= "center_vertical", поскольку атрибут LinearLayout не является достаточно-значок центрирован, но текст и кнопка-нет. Это потому что (предположительно) текст имеет базовую линию и алгоритм центрирования использовать его вместо "реального" вертикального центра. Но что еще хуже-кнопка (который находится рядом с текстом) центрируется с использованием базовой линии текста!
указание android:baselineAligned= "false" в LinearLayout превращает это выключается, и все центрируется правильно.
// 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); }