Найти тему
Android Dolgo.polo Dev

Android - Density vs Resolution vs dp vs sp vs dpi

Оглавление

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 #разработка