Определение размеров
16.01.2025
Last updated
16.01.2025
Last updated
При разработке приложений под Android используются различные типы измерений:
px: пиксели текущего экрана. Не рекомендуется, так как реальное представление может изменяться в зависимости от устройства; каждое устройство имеет разное количество пикселей на дюйм.
dp: (density-independent pixels) независимые от плотности экрана пиксели. Основаны на физической плотности экрана с разрешением 160 dpi. Формула:
px = dp * (dpi / 160)
.
sp: (scale-independent pixels) независимые от масштабирования пиксели. Рекомендуются для работы со шрифтами.
pt: 1/72 дюйма, базируются на физических размерах экрана.
mm: миллиметры.
in: дюймы.
Наиболее предпочтительной единицей измерения является dp, так как она обеспечивает консистентный вид интерфейса на устройствах с разной плотностью пикселей.
Физические пиксели: На устройствах с разными характеристиками (например, Nexus 4, Nexus 5X, Nexus 6P) квадрат размером 300px будет занимать разное пространство.
Независимые от плотности пиксели: Квадрат размером 300dp будет выглядеть одинаково на устройствах с разными экранами.
ldpi (low): ~120dpi
mdpi (medium): ~160dpi
hdpi (high): ~240dpi
xhdpi (extra-high): ~320dpi
xxhdpi (extra-extra-high): ~480dpi
xxxhdpi (extra-extra-extra-high): ~640dpi
Иногда методы принимают значения в физических пикселях, а не в dp. Для перевода значений можно использовать метод TypedValue.applyDimension()
.
Параметры метода:
unit — тип единиц:
COMPLEX_UNIT_DIP
: dp.
COMPLEX_UNIT_IN
: дюймы.
COMPLEX_UNIT_MM
: миллиметры.
COMPLEX_UNIT_PT
: точки.
COMPLEX_UNIT_PX
: физические пиксели.
COMPLEX_UNIT_SP
: sp.
value — значение для преобразования.
metrics — информация о метрике устройства.
Вызов getResources().getDisplayMetrics()
позволяет получить данные о метрике устройства, что обеспечивает правильное преобразование.