Screen Resolution == Разрешение экрана
количество пикселей
например, 320х680
Screen Density == dpi (dots per inch) == ppi (pixels per inch) == Количество пикселей/точек на дюйм == Плотность == resources.displayMetrics.densityDpi
обычно мы создаем ресурсы и распихиваем их по папочкам: ldpi < mdpi < hdpi, xhdpi, xxhdpi, xxxhdpi
• mdpi (medium dpi = 160 dpi) — эта плотность принята за базовую, относительно нее будут вычисляться коэффициенты для масштабирования
1 dp = 1 px при densityDpi = mdpi
• ldpi (low dpi = 120 dpi) — плотность пикселей ниже, чем у mdpi
• hdpi (240 dpi), xhdpi (320 dpi), xxhdpi (480 dpi), xxxhdpi (640 dpi) — плотность выше, чем у mdpi
1 dp = 2 px при densityDpi = xhdpi
еще есть:
• nodpi — ресурс не масштабируется в зависимости от плотности экрана
• tvdpi — плотность для телевизоров, находится между mdpi и hdpi
например, если мы создадим картинку 100 на 100 пикселей и положим в папку drawable-mdpi, то на устройствах с ldpi она станет меньше:
ldpi/mdpi = 120/160 = 0.75 → картинка примет размер 75 на 75 пикселей
resources.displayMetrics.density
это коэффициент — отношение плотности экрана к базовой плотности (mdpi)
например, если у экрана dpi = 120 (ldpi), то resources.displayMetrics.density = 120/160 = 0.75
dp == density-independent pixels == dip
px = dp * (dpi / mdi), где dpi - плотность текущего устройства, mdpi = 160
sp == scalable pixels
то же самое, что и dp. но! Юзер может в настройках установить кастомное масштабирование (увеличение или уменьшение) текста, и тогда sp != dp
#android #разработка