Все статьи
21 июля 2026 г.8 мин чтения

SP и DP в Android: чем отличаются единицы текста и интерфейса

SP и DP в Android: чем отличаются единицы текста и интерфейса

SP используют для текста, а DP — для размеров интерфейса Android. DP помогает сохранять пропорции кнопок, отступов и иконок на экранах с разной плотностью пикселей, тогда как SP дополнительно учитывает системный масштаб шрифта. В статье разберём формулы, практические примеры, типичные ошибки и правила выбора единиц.

Что означают dp и sp в Android

DP, или density-independent pixel, — независимая от плотности пикселей единица измерения интерфейса. Она нужна, чтобы физически похожие элементы имели сопоставимый размер на разных дисплеях. SP, или scale-independent pixel, — единица для текста, которая учитывает не только плотность экрана, но и выбранный пользователем масштаб шрифта. Поэтому dp отвечает за геометрию интерфейса, а sp — за читаемость текста.

  • DP применяют к ширине и высоте элементов, полям, отступам, радиусам и размеру иконок.
  • SP применяют к размеру текста, заголовков, подписей, кнопок и других текстовых стилей.
  • PX обозначает физические пиксели экрана и обычно не подходит для адаптивного Android-интерфейса.
  • Системный масштаб шрифта влияет на sp, но не должен неожиданно менять размеры контейнеров и декоративных элементов, заданных в dp.

Как Android пересчитывает dp и sp в пиксели

Android преобразует логические единицы в реальные пиксели во время отображения интерфейса. Для dp используется плотность экрана: количество пикселей рассчитывается как значение dp, умноженное на коэффициент density. На экране с базовой плотностью один dp соответствует одному пикселю, а на дисплеях с большей плотностью один и тот же размер занимает больше физических пикселей.

Для sp используется коэффициент scaledDensity. Он связан с плотностью экрана и системным масштабом текста. Если пользователь увеличил шрифт в настройках доступности, надпись, заданная в sp, станет крупнее. Это ожидаемое поведение: приложение не должно игнорировать настройку, которая помогает людям читать интерфейс.

Главное правило: задавайте текст в sp, а все размеры самого интерфейса — в dp. Исключение в пользу px оправдано только для редких низкоуровневых задач, например точного рисования на Canvas, когда разработчик сознательно работает с физическими пикселями.

Почему размер текста задают в sp

Размер шрифта напрямую связан с доступностью. Пользователь может выбрать увеличенный текст из-за особенностей зрения, и Android передаст это предпочтение приложениям. Если TextView или текстовый компонент используют sp, надпись масштабируется предсказуемо. Если вместо этого применить dp, приложение будет хуже реагировать на системную настройку, а его текст может оказаться слишком мелким или не соответствовать остальным приложениям.

SP не означает, что текст всегда будет занимать одинаковую ширину. При увеличении шрифта строка может перенестись, заголовок — стать двухстрочным, а кнопке потребуется больше высоты. Поэтому интерфейс проектируют с запасом: разрешают переносы, используют wrap content или гибкие ограничения и проверяют макет при нескольких размерах шрифта.

Почему размеры интерфейса задают в dp

DP позволяет описывать интерфейс независимо от конкретной плотности экрана. Отступ 16dp, высота элемента 48dp или размер иконки 24dp воспринимаются как логические размеры, а Android подбирает соответствующее количество физических пикселей. Благодаря этому кнопки, карточки и панели не становятся микроскопическими на плотных экранах и чрезмерно крупными на менее плотных.

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

DP и SP на практике: примеры для Android

Пример в XML с TextView

В XML размер текста TextView задают через атрибут android:textSize со значением в sp, например 16sp для обычного текста или 24sp для заметного заголовка. Ширину, высоту, внутренние поля и внешние отступы указывают в dp: например, padding 16dp, высота кнопки 48dp и размер иконки 24dp. Такая комбинация разделяет типографику и геометрию.

Пример в Jetpack Compose

В Jetpack Compose для размеров применяют расширение dp, а для текста — sp. В модификаторах используются значения вроде padding 16.dp и size 24.dp, а в TextStyle или параметре fontSize — 16.sp. Важно не смешивать эти типы случайным приведением: оно может скрыть ошибку в дизайне и усложнить поддержку масштабируемой вёрстки.

Пример карточки профиля

Представим карточку профиля: аватар имеет размер 48dp, расстояние от аватара до имени составляет 12dp, имя набирается размером 16sp, а вспомогательная подпись — 14sp. Если пользователь увеличит системный шрифт, имя и подпись вырастут, но это не должно сломать карточку. Контейнеру нужны гибкая высота и возможность переноса текста.

  • Иконка действия: 24dp.
  • Внутренний отступ карточки: 16dp.
  • Основной заголовок: 20sp или размер из выбранной типографической шкалы.
  • Основной текст: 16sp.
  • Вторичная подпись: 14sp.
  • Минимальная область нажатия интерактивного элемента: ориентировочно 48dp.

Как выбрать единицу для каждого элемента

Выбор единицы зависит не от того, где расположен элемент, а от того, что именно нужно масштабировать. Если объект должен сохранять геометрический размер относительно сетки интерфейса, используйте dp. Если это символы, которые пользователь читает, используйте sp. Для составного компонента применяйте обе единицы: например, текст в sp, а его поля и минимальную область нажатия — в dp.

  • Используйте sp для заголовков, абзацев, подписей, текста кнопок, пунктов меню и сообщений об ошибках.
  • Используйте dp для контейнеров, карточек, полей, разделителей, иконок, радиусов и расстояний между блоками.
  • Не используйте dp как замену sp для текста, если приложение должно поддерживать системное масштабирование шрифта.
  • Не используйте sp для отступов и размеров иконок, иначе изменение настроек текста может нарушить композицию.
  • Проверяйте интерактивные области отдельно: размер видимой иконки и область нажатия не обязаны совпадать.

Что происходит при увеличении системного шрифта

При увеличении системного шрифта значения в sp становятся визуально крупнее. Из-за этого меняется не только высота букв: увеличивается межстрочный интервал, текст занимает больше места и может переноситься на новую строку. Хороший адаптивный экран допускает такой рост, не обрезает надписи и не прячет важные действия за пределами видимой области.

Разработчику следует тестировать не только стандартный масштаб, но и увеличенные настройки шрифта. Особое внимание нужны длинным заголовкам, кнопкам с текстом, строкам формы, диалоговым окнам и элементам с фиксированной высотой. Если компонент рассчитан на одну строку, заранее определите поведение при переполнении: перенос, сокращение или изменение структуры.

Частые ошибки при работе с dp и sp

  • Задавать весь макет в px. Такой интерфейс зависит от конкретной плотности и хуже переносится между устройствами.
  • Использовать dp для текста. Надпись перестаёт корректно следовать системному масштабу шрифта.
  • Использовать sp для padding, margin или размера иконки. Увеличение текста начинает менять геометрию, которая должна быть стабильной.
  • Фиксировать высоту блока с текстом в dp без проверки переносов. При крупном шрифте надпись может обрезаться.
  • Считать, что одинаковое число dp означает одинаковый физический размер на всех устройствах. Логическая единица нормализует интерфейс, но не отменяет различия самих дисплеев.
  • Уменьшать текст, чтобы он помещался в заранее заданную ширину. Лучше пересмотреть ограничения, переносы и иерархию контента.
  • Проверять макет только на одном эмуляторе. Ошибки проявляются при другой плотности, ориентации, ширине окна или настройке доступности.

Чеклист перед выпуском Android-интерфейса

  1. Найдите все текстовые компоненты и убедитесь, что их размер задан в sp.
  2. Проверьте, что отступы, размеры контейнеров, иконок и радиусы используют dp.
  3. Удалите случайные px из ресурсов размеров и кода, если точность физического пикселя не требуется.
  4. Увеличьте системный масштаб шрифта и проверьте заголовки, кнопки, формы и диалоги.
  5. Проверьте длинные локализованные строки и переносы на узком экране.
  6. Убедитесь, что важные элементы не обрезаются и не перекрывают соседние блоки.
  7. Проверьте доступность интерактивных областей и отделите размер нажатия от размера видимого символа.
  8. Сохраните единообразную типографическую шкалу и сетку отступов во всех экранах приложения.

Особенности адаптивной вёрстки и типографики

DP и SP решают разные задачи, но сами по себе не делают экран полностью адаптивным. Адаптация также зависит от ширины окна, ориентации, режима разделённого экрана, локализации и поведения контейнеров. Для крупных экранов может потребоваться иной состав колонок, а не простое пропорциональное увеличение всех элементов.

Типографическая система должна учитывать не только число sp, но и начертание, высоту строки, длину строки и контраст. Один и тот же размер 16sp может выглядеть по-разному в разных шрифтах из-за различий в пропорциях и метриках. Поэтому при выборе шрифта для Android проверяйте кириллицу, цифры, знаки препинания и поведение текста в реальных компонентах.


FAQ: частые вопросы о SP и DP

Можно ли использовать dp для размера текста в Android?

Технически Android позволит задать текстовое значение в dp, но это плохая практика для обычного интерфейса. Размер не будет корректно учитывать системную настройку шрифта. Для текста используйте sp, а dp оставляйте для размеров и отступов компонентов.

Можно ли использовать sp для отступов?

Использовать sp для отступов не рекомендуется. При увеличении шрифта поля начнут расти вместе с текстом, из-за чего изменятся пропорции и плотность экрана. Отступы, размеры карточек и области нажатия обычно задают в dp, а текст внутри них — в sp.

Чем sp отличается от px?

PX — физический пиксель конкретного дисплея, а sp — логическая единица текста. Android преобразует sp в пиксели с учётом плотности экрана и масштаба шрифта пользователя. Поэтому sp подходит для масштабируемой типографики, а px применяют только в специальных низкоуровневых сценариях.

Какую единицу выбрать для иконки?

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

Почему текст в sp иногда выглядит слишком крупным?

Чаще всего причина в активном системном масштабе шрифта, особенностях выбранного начертания или несогласованной типографической шкале. Проверьте настройки устройства, метрики шрифта, высоту строки и соседние размеры. Не уменьшайте значение механически: сначала убедитесь, что макет рассчитан на доступные настройки текста.

Нужно ли использовать sp для текста на кнопке?

Да, текст на кнопке обычно задают в sp, потому что это читаемый пользователем текст. Высоту, минимальную ширину, внутренние отступы и область нажатия задают в dp. При увеличении шрифта кнопка должна уметь вместить надпись, перенести её или изменить компоновку без обрезания.

Нужно ли учитывать sp при выборе шрифта для Android?

Да. Шрифт влияет на ширину строк, высоту блока, переносы и визуальную иерархию даже при одинаковом значении sp. Перед внедрением проверьте кириллицу, цифры, межстрочный интервал, насыщенность и читаемость на разных масштабах. Это особенно важно для интерфейсов с длинными русскоязычными подписями.


Вывод

SP и DP в Android отвечают за разные уровни интерфейса: sp масштабирует текст с учётом настроек пользователя, а dp сохраняет согласованную геометрию элементов независимо от плотности экрана. Практическое правило простое: текст — в sp, размеры и отступы — в dp, а адаптивность проверяется на разных экранах и масштабах шрифта.

Нужен шрифт, который хорошо читается в Android-интерфейсе? Создайте и настройте собственный шрифт на fontgenerator.ru, затем проверьте его начертания, кириллицу и поведение в типографической шкале приложения.