/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Существует огромное количество устройств с разными размерами экрана от 2.6 до 6 дюймов (для телефонов) с разрешениями от 240х320 до 1440х2560 пикселей с плотностью от ldpi до xxxhdpi. И дизайнеру нужно уметь создать правильный макет для зоопарка устройств.
На данный момент Android поддерживает следующие параметры: ldpi, mdpi, hdpi, xhdpi, xxhdpi and xxxhdpi.
Базовой является плотность mdpi, когда 1px = 1dp. Остальные являются множителями:
Как уже я сказал, MDPI является базовой точкой отсчёта и соответствует размеру экрана 320х480 пикселей. Для HDPI - 480x720, XHDPI - 640x960.
Размер устройства в DP вычисляется по формуле: разрешение экрана делим на множитель, указанный выше.
Например, устройство с разрешением экрана 240х320px соответствуют 320х426.66dp (240 / 0.75 = 320; 320 / 0.75 = 426.66).
Соответственно, устройство с экраном 1080х1920 (Samsung S5) соответствует типу XXHDPI - 360x640dp (1080 / 3 = 360; 1920 / 3 = 640dp)
Дизайнер должен подготовить ресурсы для всех основных типов экрана и разместить их в соответствующих папках, а система сама выберет нужный ресурс из нужной папки.
Что будет, если подготовить одну картинку? Есть два варианта. Допустим, вы приготовили картинку для базового размера во весь экран. На современных телефонах картинка растянется в 3-4 раза и будет размыта. Хорошо, пойдём от обратного и подготовим картинку для самого большого экрана. Тут нас может ожидать другая неприятность - нехватка памяти. Большая картинка может занимать размер от 2Мб и выше. Маленькие экраны физически не смогут показать такое изображение, но будут при этом потреблять в 3-4 раза больше памяти, которой может не хватить для приложения.
Также следует учитывать, что размеры экрана у разных устройств увеличиваются/уменьшаются непропорционально по ширине и высоте. Поэтому дизайн экрана приложения должен быть достаточно гибким.
Обычно создаётся дизайн сверху вниз. Вначале наибольший размер, который будет поддерживаться приложением, а потом постепенно уменьшают все ресурсы для других разрешений.
Для фона экрана приложения используются следующие типы ресурсов:
Выше объяснялось, почему не стоит использовать последний вариант. Если ли приходится работать с этим вариантом, то используйте следующую технику. Допустим, дизайнером была подготовлена очень большая картинка на весь экран в альбомном режиме. На телефоне можно применить кадрирование и показать только центральную часть.
У компонента ImageView есть атрибут scaleType с значением CENTER_CROP.
Также можно поместить изображение в центр и добавить цветную или градиентную рамку вокруг него.
Используйте в этом случае scaleType = CENTER_INSIDE.
Если фон однородный и его можно растянуть без ущерба качеству, то воспользуйтесь scaleType = FIT_XY.
Tips for designers: from a developer for Android | Vinsol