Что такое плотность экрана

Ответ

Плотность экрана (density) — это количество пикселей на физическую единицу площади (обычно dpi — dots per inch). В Android используется понятие логической плотности (density-independent pixel, dp), чтобы UI выглядел одинаково на устройствах с разной плотностью экрана.

Основные плотности в Android:

  • ldpi (~120dpi)
  • mdpi (~160dpi) — базовая плотность (1dp = 1px)
  • hdpi (~240dpi)
  • xhdpi (~320dpi)
  • xxhdpi (~480dpi)
  • xxxhdpi (~640dpi)

Пример конвертации dp в px:

val dp = 16f
val px = dp * resources.displayMetrics.density

Важно: всегда используйте dp для размеров и sp для текста, чтобы обеспечить корректное отображение на разных устройствах.

Ответ 18+ 🔞

Давай разберёмся с этой ебушкой-воробушкой под названием плотность экрана. Ну, в общем, чтобы твой интерфейс не превращался в пиздапроебибну на разных телефонах, придумали такую штуку.

Смотри, есть физическая плотность — сколько этих пикселей на дюйм напихано. Это dpi. А есть логическая плотность — dp. Это, блядь, как бы абстрактная единица, чтобы отвязаться от реальных пикселей. На базовой плотности (mdpi, 160 dpi) один dp равен одному пикселю. А на других — хуй с горы, система сама пересчитает.

Вот основные категории, чтобы ты не охуел, когда будешь картинки готовить:

  • ldpi (~120dpi) — для древних девайсов, которые уже в музее пылятся.
  • mdpi (~160dpi) — базовая, точка отсчёта. 1dp = 1px.
  • hdpi (~240dpi)
  • xhdpi (~320dpi)
  • xxhdpi (~480dpi) — сейчас в основном такое.
  • xxxhdpi (~640dpi) — для самых навороченных, где овердохуища пикселей.

Если тебе в коде надо из dp в px перевести, вот тебе волшебная формула, ёпта:

val dp = 16f
val px = dp * resources.displayMetrics.density

Но самое главное правило, которое надо вбить себе в башку, чтобы не было потом удивления пиздец: ВСЕГДА используй dp для размеров (отступы, ширина кнопок) и sp для размера текста. sp — это такие же dp, но ещё и с учётом настроек размера шрифта у пользователя в системе. Если будешь пиксели тыкать, получится мартышлюшка — на одном телефоне кнопка с ноготь, а на другом — на полэкрана. Доверия к такому разработчику — ноль ебать.