×

Полифония экранов: практический гид по android-адаптивности

Гаджеты укладываются в карман, скрывают пол-кабинета, гнутся змеиным суставом, стыкуются в двуэкранные книжки. Каждый формат просит собственный ритм интерфейса. Я предпочитаю начинать с картины, где мельчайший компонент не липнет к углам и не растягивается бездумно.

адаптивность

Компоновка без догадок

ConstraintLayout в паре с Guideline и Barrier даёт шахматную доску без фиксированного поля. Опорные линии описывают дыхание экрана, а ограничения удерживают элементы, будто магнитами. Весовые коэффициенты внутри цепочек распределяют оставшееся пространство без ручных вычислений. Векторные иконки в формате XML заменяют битмапы, сохраняя резкость при переливе dpi. Скругления, тени и градиенты переходят под крыло MaterialShapeDrawable, избавляя от растровых артефактов.

Размеры как гибкий ток

Плотность измеряется bucket-ами: ldpi, mdpi, hdpi, xhdpi, xxhdpi, xhdpi. Вместо пикселей я записываю значения в dp и sp — условные единицы, привязанные к 160 dpi и пользовательскому коэффициенту читаемости. Типизированные ресурсы values-wdp раскрывают иной набор размеров при достижении порога ширины: values-w600dp обслуживает планшет-портрет, values-w720dp—пейзаж. Папки layout-swdp хранят отдельную раскладку, когда перестройка безболезненна только через замену иерархии. WindowMetrics API сообщает фактическую рабочую зону с учётом вырезов и системных жестов, позволяя обойти причуды Cutout-нотаций без уравнений. Для Compose аналогичную задачу решает Modifier.windowInsetsPadding.

Оценка на живых устройствах

Чтобы артефакты не всплывали уже в руках клиента, я запускаю матричный тест. Cradle подключениячается к Firebase Test Lab, где реальные смартфоны масс-тестируют apk. Логика распределения путей проверяется скриптом, который сравнивает выбранные ресурсы с ожидаемым набором через AAPT dump. Для интерактивного контроля ADB предлагает команду wm size и wm density: экран искусственно меняет диагональ и плотность, а приложение реагирует без перезапуска благодаря onConfigurationChanged. Лупинг GIF-записей из strcpy помогает отследить дрожание пикселей на переходах.

Теория засыпает, когда дизайн живёт в руках пользователя. Я удерживаю тело интерфейса упругим, как стальной трос на подвесном мосту: ультратонкие телефоны, складки Foldable, телевизоры c Leanback — каждый найдёт гармонию, если код разговаривает с железом грамотно и уважительно.