В чем разница между «px», «dip», «dp» и «sp»? - PullRequest
5571 голосов
/ 08 января 2010

В чем разница между единицами измерения Android?

  • px
  • dip
  • dp
  • sp

Ответы [ 35 ]

5562 голосов
/ 08 января 2010

Из документации для разработчиков Android :

  1. * 1009 точек *
    Pixels - соответствует фактическим пикселям на экране.

  2. в
    дюймы - в зависимости от физического размера экрана.
    1 дюйм = 2,54 см

  3. мм
    Миллиметры - в зависимости от физического размера экрана.

  4. пт
    Точки - 1/72 дюйма в зависимости от физического размера экрана.

  5. дп или дип
    Density -independent Pixels - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к 160 Экран dpi, поэтому один dp - это один пиксель на экране 160 dpi. Соотношение dp-to-pixel будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание: компилятор принимает как «dip», так и «dp», хотя «dp» более соответствует «sp».

  6. зр
    Масштаб -независимых пикселей - это похоже на единицу измерения dp, но оно также масштабируется в зависимости от размера шрифта пользователя. Рекомендуется вам используйте этот блок при указании размеров шрифта, чтобы они были скорректированы для плотности экрана и предпочтений пользователя.

С Понимание независимости от плотности в Android :

+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size                    | 
+----------------+----------------+---------------+-------------------------------+
| ldpi           | 120 dpi        | 0.5 x 0.5 in  | 0.5 in * 120 dpi = 60x60 px   | 
+----------------+----------------+---------------+-------------------------------+
| mdpi           | 160 dpi        | 0.5 x 0.5 in  | 0.5 in * 160 dpi = 80x80 px   | 
+----------------+----------------+---------------+-------------------------------+
| hdpi           | 240 dpi        | 0.5 x 0.5 in  | 0.5 in * 240 dpi = 120x120 px | 
+----------------+----------------+---------------+-------------------------------+
| xhdpi          | 320 dpi        | 0.5 x 0.5 in  | 0.5 in * 320 dpi = 160x160 px | 
+----------------+----------------+---------------+-------------------------------+
| xxhdpi         | 480 dpi        | 0.5 x 0.5 in  | 0.5 in * 480 dpi = 240x240 px | 
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi        | 640 dpi        | 0.5 x 0.5 in  | 0.5 in * 640 dpi = 320x320 px | 
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit    | Description | Units Per     | Density     | Same Physical Size | 
|         |             | Physical Inch | Independent | On Every Screen    | 
+---------+-------------+---------------+-------------+--------------------+
| px      | Pixels      | Varies        | No          | No                 | 
+---------+-------------+---------------+-------------+--------------------+
| in      | Inches      | 1             | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| mm      | Millimeters | 25.4          | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| pt      | Points      | 72            | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| dp      | Density     | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
| sp      | Scale       | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

Дополнительную информацию можно также найти в Google Design Documentation .

660 голосов
/ 25 февраля 2011

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

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

Плотность экрана
Количество пикселей в физической области экран; обычно называется dpi (точек на дюйм). Например, «экран низкой плотности» имеет меньше пикселей в данной физической области, по сравнению с "нормальной" или "высокой" плотностью экрана. Для простоты, Android группирует все фактические плотности экрана в шесть обобщенных плотности: низкая, средняя, ​​высокая, сверхвысокая, сверхвысокая и экстра-экстра-экстра-высокий.

Ориентация
Ориентация экрана от точки пользователя Посмотреть. Это либо пейзаж, либо портрет, что означает, что экран Соотношение сторон либо широкое, либо высокое соответственно. Знать, что не только разные устройства работают в разных ориентациях по умолчанию, но ориентация может измениться во время выполнения, когда пользователь вращает устройство.

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

Плотно-независимый пиксель (dp)
Виртуальный Пиксельная единица измерения, которую следует использовать при определении макета пользовательского интерфейса, чтобы выразить Размеры или расположение макета не зависят от плотности. Плотно-независимый пиксель эквивалентен одному физическому пикселю на 160 Экран dpi, который является базовой плотностью, принятой системой для Экран средней плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование дп единиц, по мере необходимости, исходя из фактической плотности используемого экрана. Преобразование единиц измерения в пиксели экрана просто: px = dp * (dpi / 160). Например, на экране с разрешением 240 т / д, 1 дп равен 1,5 физических пикселей. Вы всегда должны использовать дп единиц, когда определение интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего интерфейса на экраны с разной плотностью.

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

327 голосов
/ 02 августа 2012

Я подробнее расскажу, как именно dp конвертируется в px:

  • При работе на устройстве mdpi изображение 150 x 150 px займет 150 * 150 dp места на экране.
  • При работе на устройстве hdpi изображение 150 x 150 px займет 100 * 100 dp места на экране.
  • При работе на устройстве xhdpi изображение 150x150 px займет 75 * 75 dp места на экране.

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

  • 100 * 100 px изображение для mdpi
  • 150 * 150 px изображение для hdpi
  • 200 * 200 px изображение для xhdpi
271 голосов
/ 30 октября 2012

точек Пиксели - точка на шкале соответствует фактическим пикселям на экране.

в Дюймы - в зависимости от физического размера экрана.

мм Миллиметры - в зависимости от физического размера экрана.

пт Точки - 1/72 дюйма в зависимости от физического размера экрана.

дп Плотность - независимые пиксели - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому один dp - это один пиксель на экране с разрешением 160 точек на дюйм. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание. Компилятор принимает значения dip и dp, хотя dp более соответствует sp.

зр -Независимые от масштаба пиксели - это как dp блок, но он также масштабируется в зависимости от размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, поэтому они будут отрегулированы как по плотности экрана, так и по предпочтениям пользователя.

Возьмем пример двух экранов одинакового размера, но один имеет плотность экрана 160 точек на дюйм (точек на дюйм, т.е. пикселей на дюйм), а другой - 240 точек на дюйм.

                          Lower resolution   screen          Higher resolution, same size
Physical Width                      1.5 inches                        1.5 inches
Dots Per Inch (“dpi”)               160                               240
Pixels (=width*dpi)                 240                               360
Density (factor of baseline 160)    1.0                               1.5

Density-independent Pixels          240                               240
(“dip” or “dp” or “dps”)

Scale-independent pixels 
 (“sip” or “sp”)                  Depends on user font size settings    same
218 голосов
/ 27 июля 2013

Кроме того, вы должны иметь четкое представление о следующих понятиях:

Размер экрана:

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

Плотность экрана:

Количество пикселей в физической области экрана; обычно называется dpi (точек на дюйм). Например, «экран низкой плотности» имеет меньше пикселей в данной физической области, по сравнению с "нормальной" или "высокой" плотностью экрана. Для простоты, Android группирует все фактические плотности экрана в четыре обобщенных плотности: низкая, средняя, ​​высокая и сверхвысокая.

Ориентация:

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

Разрешение:

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

Плотно-независимый пиксель (dp):

Виртуальный пиксельный модуль, который следует использовать при определении макета пользовательского интерфейса, чтобы выразить размеры макета или положение в зависимости от плотности. Плотно-независимый пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовая плотность, принятая системой для экрана средней плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование dp единиц, при необходимости, исходя из фактической плотности используемого экрана. Преобразование единиц dp в пиксели экрана очень просто: px = dp * (dpi / 160). Например, на экране с разрешением 240 т / д 1 дп означает 1,5 физических пиксели. Вы должны всегда использовать дп единиц при определении вашего интерфейс приложения, чтобы обеспечить правильное отображение вашего интерфейса на экранах с разной плотности.

Ссылка: Сайт разработчиков Android

191 голосов
/ 17 октября 2014

dp - это dip. Используйте его для всего (поля, отступы и т. Д.).

Используйте sp только для {text-size}.


Чтобы получить одинаковый размер на разных плотностях экрана, Android переводит эти единицы в пиксели во время выполнения, поэтому вам не придется делать сложную математику.


См. Разницу между px, dp и sp на экранах разных размеров.

Enter image description here

Источник: Программирование на Android: Руководство ранчо "Большой ботаник"

137 голосов
/ 30 октября 2013

Я рассчитал формулу ниже, чтобы сделать преобразования dpi в dp и sp enter image description here

130 голосов
/ 10 января 2016

Определения

px или точка - это пиксель на физическом экране.

точек на дюйм - это пиксели на дюйм на физическом экране и представляют плотность отображения.

Android дает псевдонимов имен для нескольких плотностей

  • ldpi (низкий) ~ 120 dpi
  • т / д (средний) ~ 160 т / д
  • HDMI (высокий) ~ 240 точек на дюйм
    • большинство устройств в 2015 году здесь
  • xhdpi (сверхвысокий) ~ 320 dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (экстра-сверх-высокий) ~ 480dpi
    • Nexus 5
  • xxxhdpi (экстра-экстра-экстра-высокий) ~ 640 точек на дюйм

dip или dp являются независимыми от плотности пикселями , т.е. они соответствуют большему или меньшему количеству пикселей в зависимости от физической плотности.

  • 1dp = 1px на mdpi

enter image description here

sp или sip является независимым от масштаба пикселем . Они масштабируются, когда опция Большой текст включена в Настройки > Доступность

  • 1sp = 1dp
  • 1sp = 1.2dp с доступностью Большой текст

Что использовать?

Используйте sp для размера текста.

Используйте dp для всего остального.

123 голосов
/ 27 декабря 2013

Источник 1

Источник 2

Источник 3 : (данные из источника 3 приведены ниже)

Это значения измерений, определенные в XML. Размер указан с номером, за которым следует единица измерения. Например: 10px, 2in, 5SP. Android поддерживает следующие единицы измерения:

дп

Плотно-независимые пиксели - абстрактная единица, основанная на физическая плотность экрана. Эти единицы относительно 160 точек на дюйм (точек на дюйм) экран, на котором 1dp примерно равен 1px. когда работает на экране с более высокой плотностью, количество пикселей, используемых для рисования 1dp увеличивается с коэффициентом, соответствующим dpi экрана. Аналогично, при использовании экрана с меньшей плотностью количество используемых пикселей для 1dp уменьшается. Соотношение dp-to-pixel будет меняться с плотность экрана, но не обязательно в прямой пропорции. Используя дп Единицы (вместо пикселей) это простое решение для создания представления Размеры в вашем макете изменить размер для другого экрана плотности. Другими словами, это обеспечивает последовательность для реального мира размеры ваших элементов интерфейса на разных устройствах.

зр

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

пт

Точки - 1/72 дюйма в зависимости от физического размера экрана.

РХг 1035 *

Pixels - соответствует фактическим пикселям на экране. Эта единица мера не рекомендуется, потому что фактическое представление может варьироваться через устройства; каждое устройство может иметь разное количество пикселей на дюймов и может иметь больше или меньше доступных пикселей на экране.

мм

Миллиметры - в зависимости от физического размера экрана.

в

дюймов - в зависимости от физического размера экрана.

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

112 голосов
/ 21 сентября 2012

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

При> 160 dpi вы можете получить 2-3 пикселя,

При> 120 dpi округляется до 0.

...