В чем разница между «px», «dip», «dp» и «sp»?

5818

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

  • ПВ
  • падение
  • дп
  • зр
capecrawler
источник
65
это полная разница между px, dip, dp и sp в Android [ developer.android.com/guide/topics/resources/…
NagarjunaReddy
20
Этот отличный конвертер демонстрирует это лучше всего , на мой взгляд. Это также чрезвычайно полезно для экспорта спрайтов из Photoshop или разработки макета для физического измерения.
Пол Ламмерцма
9
новое описание в Google Design Единицы измерения и измерения
Арнав М.
1
Материал конструкции с пиксельной плотностью material.io/design/layout/...
Shomu

Ответы:

5775

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

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

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

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

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

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

  6. sp
    Scale- независимые пиксели - это как единица измерения 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 .

Стивен Байл
источник
17
несмотря на то, что они должны быть одинаковыми, у меня, как правило, много проблем с dp, в то время как с dip все отлично работает
DallaRosa
247
Одно замечание о db / sp, которое не совсем очевидно: масштабирование, которое происходит для них, зависит не от реальной плотности устройства (dpi), а от того, в какую «группу» плотностей он попадает: доступные корзины: 120 160 2404020. Это может вызвать некоторые проблемы при работе с экранами, которые значительно различаются, но имеют одинаковые значения.
Fraggle
15
Обратите внимание, что в документации больше не упоминается «dip», а только «dp», хотя компилятор, похоже, все еще принимает «dip».
Адам Розенфилд
15
@android_developer (5 комментариев выше) dpвовсе не имеют точно такую же физическую длину. (Хотя это близко.) См. Комментарий @ Fraggle о ведении. Это означает, что 48dp будет примерно 8 мм (0,3 дюйма), но может варьироваться до 11 мм.
Intrepidis
11
Причина в том, что разработчики могут тестировать свои приложения на нескольких устройствах различной плотности и быть уверенными, что макеты будут выглядеть одинаково на множестве устройств. Таким образом, даже если физический размер кнопок и т. Д. Немного изменится, общий вид действия будет таким же.
Intrepidis
685

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

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

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

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

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

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

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

борец
источник
41
Итак, если вы используете dp для кнопки и sp для размера шрифта текста кнопки, что произойдет, когда пользователь начнет масштабирование? Текст будет увеличен, но будет ли кнопка соответствовать и увеличению?
Wytze
11
@ Вит, нет. Для вещей, где подгонка текста может быть проблемой, я бы просто использовал dip, чтобы вещи не переполнялись.
Эски
12
@Wytze А я, наоборот, использую sp как для текста, так и для всего, что в нем содержится. Например, если у меня есть кнопка с фиксированным размером и текстом внутри нее, я бы назначил размер кнопки в sp, чтобы она также увеличивалась при необходимости. В противном случае, пользователь будет раздражен, что он увеличил размер текста, и он не увеличился. Конечно, макет должен быть достаточно гибким, чтобы это было возможно.
Малкольм
2
Если ваши дизайнеры не оставят места для масштабирования текстовых элементов в соответствии с размером sp, один из вариантов - переключиться на макет, который вы будете использовать для более узкого устройства, а затем равномерно масштабировать все (DisplayMetrics.scaledDensity / DisplayMetrics. плотность).
Джон Меллор
@Sam отсутствие свободного места также вызовет проблемы во время i18n
снижение активности
347

Я подробнее расскажу о том, как именно 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 изображение для HDDP
  • 200 * 200 px изображение для xhdpi
devmiles.com
источник
2
Как мы вычисляем пиксели для hdpi, ldpi, mdpi и т. Д. Я слышал, что мы используем эту формулу..px = dp * (dpi / 160); Можете ли вы объяснить мне с этой формулой плз?
Ракеш Патанга
@Rakeshpatanga При плотности 160 dpi 1 px = 1 dp (физический пиксель и абстракция dp одинаковы). То есть для одного dp имеем (1) * (160/160) = 1, или ровно 1 px. При более высокой плотности, равной 320 точек на дюйм, одно значение dp составляет (1) * (320/160) = 2 пикселя, а два значения dp составляют (2) * (320/160) = 4 пикселя.
Сами
Выровняйте их в моноширинном пространстве, чтобы увидеть: | 1dp |, | ___ | ___ | 160, | _ | _ | _ | _ | 320 (ставить разрывы строк после запятых). | _ | = 1 p i x el.
Сами
re "Вам нужно будет создать изображения разного размера для поддерживаемых размеров экрана:" Это зависит. Для небольших высококонтрастных изображений, например значков, целесообразно создать по крайней мере наименьший размер (чтобы он был четким) плюс довольно большой размер (чтобы большие версии не выглядели размытыми). Но даже для значков вы можете позволить одному изображению масштабироваться в диапазоне размеров при более высокой плотности. Для фотографий просто укажите область отображения, которую вы хотите заполнить, и полагайтесь на масштабирование устройства.
ToolmakerSteve
286

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

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

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

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

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

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
Амит Гаджера
источник
234

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

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

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

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

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

Ориентация:

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

Разрешение:

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

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

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

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

Саззад Хисейн Хан
источник
Значит ли это, что все, что вы разрабатываете с использованием модулей dp, всегда будет занимать один и тот же% экрана независимо от плотности пикселей устройства? Предполагая идентичные пропорции.
DBIT
199

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

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


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


Чувствуете разницу между px, dpи spна различных размеров экрана.

Введите описание изображения здесь

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

Мина Габриэль
источник
144

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

chaitanya
источник
10
Это должно быть ppi вместо dpi
Prateek
142

Определения

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

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

Android дает псевдонимы с несколькими значениями плотности

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

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

  • 1dp = 1px на mdpi

введите описание изображения здесь

sp или sip - это независимый от масштаба пиксель . Они масштабируются при включении опции « Большой текст» в Settings>Accessibility

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

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

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

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

выстр
источник
129

Источник 1

Источник 2

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

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

дп

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

зр

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

пт

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

ПВ

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

мм

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

в

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

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

sms247
источник
9
Кроме того: какова дополнительная ценность этого ответа? Кажется, нет ничего, что еще не было упомянуто в других ответах.
Лаальто
119

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

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

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

Джо Планте
источник
getDimensionPixelOffset округляет, getDimensionPixelSize округляет.
Евгений
102

ПВ

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

дп или провал

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

Использование дп:

Независимость от плотности - Ваше приложение достигает «независимости от плотности», когда оно сохраняет физический размер (с точки зрения пользователя) элементов пользовательского интерфейса при отображении на экранах с различной плотностью. (т.е.) изображение должно выглядеть одинаково (не увеличено или уменьшено) на разных типах экранов.

зр

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

http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

Нирав Ранпара
источник
98

Где использовать что и отношения между px и dp?

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

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

px = dp * (dpi / 160).

Например, на экране с разрешением 240 dpi 1 dp равен 1,5 физических пикселей. Вы должны всегда использовать единицы измерения dp при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.

Понимание пикселя в dp и наоборот очень важно (особенно для точного определения значений dp для творческой команды)

dp = px * 160 / dpi

MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.

HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp

For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
 4.7" diagonal
  • Попробуйте получить все значения пикселей в четных числах от творческой группы. В противном случае потеря точности произойдет при умножении на 0,5.

ПВ

Это объяснено выше. Старайтесь избегать в макете файлов. Но в некоторых случаях требуется px. например, разделительная линия ListView. px лучше использовать для выделения однопиксельной линии в качестве разделителя для всех разрешений экрана.

зр

Используйте sp для размеров шрифта. Тогда только шрифт внутри приложения будет изменяться при изменении размера шрифтов устройства (то есть, Отображение -> Шрифты на устройстве). Если вы хотите сохранить шрифт статического размера внутри приложения, вы можете указать размер шрифта в dp. В таком случае это никогда не изменится. Разработчики могут получить такое требование для некоторых конкретных экранов, для этого разработчики могут использовать dp вместо sp. Во всех остальных случаях рекомендуется sp.

Arunjyothis
источник
90

Вы можете увидеть разницу между pxи dpизображенный на картинке, и вы также можете найти , что pxи dpне может гарантировать те же физические размеры на разных экранах.

введите описание изображения здесь

зефир
источник
3
@EnesBattal, я думаю, потому что ДП не является острым физическим размером, это приблизительное значение. Цитата из CapTech: «dp - это единица, не зависящая от плотности, однако физический размер одного« dp »только приблизительно одинаков для каждой плотности экрана. В дюйме приблизительно 160« dp ». Коэффициент масштабирования, зависящий от в области плотности устройства, применяется для преобразования «dp» в число пикселей с разрешением 160 точек на дюйм. Число пикселей, на которое переводится один «dp», варьируется в зависимости от плотности пикселей на экране и области плотности, на которую устройство падает. в."
Зефир
3
@RuchirBaronia, я думаю, что DP или DIP все еще находятся внутри apk, потому что apk еще не знает, с какой плотностью экрана он будет работать, поэтому независимость устройства должна сохраняться.
Зефир
79

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

Вы можете использовать как dpи dipна своих местах.

Атиш Агравал
источник
69

Я бы использовал только дп.

Существует много разговоров об использовании «sp» для размеров шрифта, и хотя я ценю это, я не думаю, что это правильно с точки зрения дизайна. Вы можете в конечном итоге нарушить свой дизайн, если у пользователя будет какой-то неудачный выбор размера шрифта, и в итоге пользователь будет винить приложение , а не свой собственный жизненный выбор.

Кроме того, если вы возьмете приложение sp-font на планшете с разрешением 160 точек на дюйм, вы обнаружите, что все масштабируется ... кроме вашего шрифта, который будет выглядеть крошечным в сравнении. Это не очень хорошо выглядит.

Хотя идея «sp» шрифтов имеет хорошее сердце, это плохая идея. Палка с дп для всего.

нахур
источник
1
Вы знаете, что масштабный коэффициент шрифта применяется к spфактору, верно? Все, что влияет dp, также повлияет sp. Тем не менее, по-прежнему предпочтительнее указывать размеры шрифта, используя dpвместо того, spчтобы ваш макет был очень узким и большие размеры не подходили - лучше, чтобы текст был меньше, чем того хочет пользователь, в полностью испорченном макете. Но в первую очередь вы всегда должны стремиться соблюдать предпочтения размера шрифта пользователя - даже самый большой параметр не слишком большой.
Кару
67

sp = масштабно независимый пиксель

dp = dip = плотность независимых пикселей

точек на дюйм = точек на дюйм

Мы должны избегать использования sp .

Мы должны использовать dp для поддержки нескольких экранов.

Android поддерживает разные разрешения экрана

  • ldpi (низкий) ~ 120 dpi
  • т / д (средний) ~ 160 т / д
  • HDI (высокий) ~ 240 точек на дюйм
  • xhdpi (сверхвысокий) ~ 320 т / д
  • xxhdpi (экстра-экстра-высокий) ~ 480 точек на дюйм
  • xxxhdpi (экстра-экстра-экстра-высокий) ~ 640 точек на дюйм

Устройство с разрешением 120 dp ldpi имеет размер 120 пикселей в 1 дюйме.

То же самое для других плотностей ...

Мы, как разработчики программного обеспечения, должны использовать эту формулу преобразования:

пиксель = dp * (плотность / 160)

Таким образом, у 1 dp устройства с разрешением 240 точек на дюйм будет = 1 * (240/160) = 3/2 = 1,5 пикселя.

И 1 dp устройства с разрешением 480 точек на дюйм будет иметь = 1 * (480/160) = 3 пикселя.

Используя эти 1,5 и 3 пикселя знания, инженер-программист может проектировать макеты для разных плотностей.

Чтобы проверить параметры экрана любого устройства:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Toast.makeText(
    this,
    "4:" + metrics.heightPixels + "," + metrics.density + ","
    + metrics.densityDpi, Toast.LENGTH_LONG).show();
Kushal
источник
Очень хороший учебник для понимания: HTTP: /vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer
Kushal
5
«Мы должны избегать использования sp» Почему это? Вы должны использовать sp при работе с размерами шрифта, потому что он учитывает предпочтительный размер текста пользователя, developer.android.com/training/multiscreen/screendensities.html
ci_
Я ответил относительно перспективы макета. Пожалуйста, прочитайте ссылку, которую вы предоставили ", поэтому вы должны использовать эту единицу измерения при определении размера текста (но не для размеров макета)".
Кушал
Вопрос был «Разница между px, dp, dip и sp в Android?» Ваш ответ сказал: «Мы должны избегать использования sp». Там не было никакого упоминания о «перспективе макета» нигде
ci_
Да .. дп и дип одинаковы ... используются взаимозаменяемо ... мой ответ решить ваш запрос?
Кушал
61

Различие между dpи spединицами, указанными как « предпочтение размера шрифта пользователя » ответами, скопированными из официальной документации, можно увидеть во время выполнения, изменив Settings->Accessibility->Large Textпараметр.

Large Textопция заставляет текст стать в 1.3разы больше.

private static final float LARGE_FONT_SCALE = 1.3f;

Конечно, это может зависеть от поставщика, поскольку оно находится в пакетах / приложениях / настройках .

auselen
источник
52

точек на дюйм -

  • Точек на дюйм
  • Измерение плотности пикселей на экране.

px - пиксель

  • Для отображения пикселей на экране

баллы - баллы

  • Около 1/72 дюйма относительно физического размера экрана.

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

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

sp - масштабно-независимый пиксель.

  • На основе предпочтения размера шрифта пользователя.
  • Шрифт должен быть в 'sp'.

падение -

  • провал == дп
  • Плотность независимого пикселя.
  • Это зависит от плотности экрана.
  • На экране с разрешением 160 точек на дюйм 1 пиксель = 1 пиксель.
  • Используйте dp кроме размера шрифта текста.

В стандарте используются dp и sp. sp для размера шрифта и dp для всего остального.

Формула для пересчета единиц:

px = dp * (dpi / 160);

Density Bucket -> Screen Display => 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  
Arunendra
источник
Согласно документации, компилятор принимает и «dip», и «dp», хотя «dp» более соответствует «sp».
Арундра,
46

Вот формула, используемая Android:

px = dp * (dpi / 160)

Где dpi - одна из следующих плотностей экрана. Для списка всех возможных плотностей перейдите сюда

Он определяет константы "DENSITY_ *".

  • ldpi (низкий) ~ 120 dpi
  • т / д (средний) ~ 160 т / д
  • HDI (высокий) ~ 240 точек на дюйм
  • xhdpi (сверхвысокий) ~ 320 точек на дюйм
  • xxhdpi (экстра-экстра-высокий) ~ 480dpi
  • xxxhdpi (экстра-экстра-экстра-высокий) ~ 640 точек на дюйм

Взято отсюда .

Это поможет разобраться во многих путаницах при переводе между px и dp, если вы знаете разрешение экрана.

Итак, допустим, вы хотите изображение с разрешением 60 dp для экрана hdpi, тогда физический размер пикселя 60 dp:

px = 60 * (240 / 160)
Дэн Борза
источник
45

Размер экрана в Androidсгруппирована по категориям small, medium, large, extra large, double-extraи triple-extra. Плотность экрана - это количество пикселей в пределах области (например, дюйма) экрана. Обычно измеряется в точках на дюйм (dpi). Плотность экрана сгруппирована как низкая, средняя, ​​высокая и сверхвысокая. Разрешение - это общее количество пикселей на экране.

  • dp: независимый от плотности пиксель, он зависит от плотности экрана. На экране с разрешением 160 точек на дюйм 1 пиксель = 1 пиксель. За исключением размера шрифта, всегда используйте dp.
  • dip: dip == dp. В более ранних версиях Android использовался dip, а затем был изменен на dp.
  • sp: масштабировать независимый пиксель, масштабируется на основе предпочтения размера шрифта пользователя. Шрифты должны использовать sp.
  • px: наш обычный стандартный пиксель, который отображается на пиксель экрана.
  • в дюймах относительно физического размера экрана.
  • мм: миллиметры относительно физического размера экрана.
  • pt: 1/72 дюйма относительно физического размера экрана.

Формула для преобразования между единицами

 px = dp * (dpi / 160)

DP на px в устройстве

Следующий пример может помочь лучше понять. Масштабирование происходит на основе размера сегмента 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) и 640 (xxxhdpi). Google предлагает соотношение для проектирования 3: 4: 6: 8: 12 для ldpi: mdpi: hdpi: xhdpi: xxhdpi

150px X 150px изображение займет,

  • 150 dp X 150 dp пространство экрана в мдпи
  • 100 dp X 100 dp экранного пространства в hdpi
  • 75 dp X 75 dp экранного пространства в xhdpi

Вы можете использовать следующий калькулятор DPI, чтобы исправить размеры изображения и другие размеры, когда вы хотите иметь единый дизайн интерфейса на всех устройствах Android.

Калькулятор DPI в Java

/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/


public class DPICalculator {

private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;    

private float forDeviceDensity;
private float width;
private float height;

public DPICalculator(float forDeviceDensity, float width, float height){
    this.forDeviceDensity = forDeviceDensity;
    this.width = width;
    this.height = height;
}

public static void main(String... args) {
    DPICalculator dpiCalculator = new DPICalculator(240,330,120);
    dpiCalculator.calculateDPI();
}


private float getPx(float dp, float value) {
    float px = dp * (value / forDeviceDensity );        
    return px;
}

private void calculateDPI() {

    float ldpiW = getPx(LDPI,width);        
    float ldpiH =  getPx(LDPI,height);
    float mdpiW = getPx(MDPI,width);        
    float mdpiH =  getPx(MDPI,height);        
    float hdpiW = getPx(HDPI,width);        
    float hdpiH =  getPx(HDPI,height);       
    float xdpiW = getPx(XHDPI,width);        
    float xdpiH =  getPx(XHDPI,height);
    float xxdpiW = getPx(XXHDPI,width);        
    float xxdpiH =  getPx(XXHDPI,height);
    float xxxdpiW = getPx(XXXHDPI,width);        
    float xxxdpiH =  getPx(XXXHDPI,height);

    System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
    System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
    System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
    System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
    System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
    System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);        
   }
}

Более подробную информацию смотрите по следующей ссылке.

http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/

Рави Вагела
источник
45

Пожалуйста, прочитайте ответ от сообщества вики. Ниже упомянута некоторая информация, которая должна быть рассмотрена в дополнение к вышеупомянутым ответам. Большинство разработчиков Android упускают это при разработке приложений, поэтому я добавляю эти моменты.

sp = масштабно независимый пиксель

dp = плотность независимых пикселей

dpi = плотность пикселей

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

sp принимает текстовый формат устройства, а dp - стандарт плотности устройства (никогда не меняются в устройстве). Скажем, текст 100sp может занимать 80% экрана или 100% экрана в зависимости от размера шрифта, установленного в устройстве.

введите описание изображения здесь

Вы также можете использовать sp для границ макета, это будет работать :) Нет стандартного приложения, использующего sp для всего текста

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

  • Не используйте sp для текста на панели инструментов (можно использовать размеры Android для разных размеров экрана с помощью dp)
  • Не используйте sp для текста в маленьких ограниченных кнопках, очень маленького текста и т. Д.

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

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

Также обратите внимание, что люди используют собственный шрифт в своем телефоне. Таким образом, отсутствие шрифта может вызвать проблемы с пробелами и все такое. Скажем, размер шрифта 12sp для пользовательского шрифта может занять несколько пикселей больше, чем шрифт по умолчанию.

Обратитесь на сайт разработчика Google для получения информации о размерах экрана и базовой плотности для Android. https://developer.android.com/training/multiscreen/screendensities

Shijin
источник
43
  • px - один пиксель, такой же, как в CSS, JavaScript и т. д.
  • sp - масштабно-независимые пиксели
  • dip - независимые от плотности пиксели

Обычно sp используется для размеров шрифта, тогда как dip используется (также называемый dp) для других.

DPC
источник
39

Я наткнулся на хорошую статью о разработке пользовательского интерфейса приложений Android для разных разрешений экрана, и я хотел бы оставить ее здесь только для тех, кто ищет в этой области. Да, я знаю, что это как-то описано в Google Docs (и упоминается в постах выше), я читал это, но это было нехорошо для меня (да, я могу быть слишком глупым)). Мне оставалось неясным, как создавать макеты, способные работать с экранами разного размера. Я ненавижу концепцию DP и так далее, когда мне нужно реализовать «гибкий» макет интерфейса для разных экранов. (Привет, разработчики iOS - да, вы правы, это концепция раскадровки).

У Android неплохая концепция пользовательского интерфейса, но, к сожалению, в нем нет функций iOS Storyboard. Разработка гибкого пользовательского интерфейса в Android - вещь не из легких (в лучшем случае).

Вот статья, которая помогла мне понять, что делать в Android, чтобы создавать макеты для экрана разных размеров:

Блог JMSTUDIO: - Определите размер экрана приложения для Android

Как разработать пользовательский интерфейс для приложений Android для экрана другого размера

Для разработки пользовательского интерфейса приложения для экранов разных размеров наш первоначальный дизайн должен соответствовать минимально необходимому пространству для каждого размера экрана. Android определяет минимальный размер (в dp) для каждого обобщенного типа экрана. Вот руководство по размеру экрана Android. Минимальный размер экрана для Android в дп Когда мы получаем размер экрана в dp, нам не достаточно разработать пользовательский интерфейс приложения для Android. Для каждого размера экрана нам нужно подготовить графику и растровые изображения для каждой плотности. Вот инструкция по плотности экрана Android. Руководство по плотности Android (т / д)

Для простоты расчета мы можем использовать масштабное соотношение 3: 4: 6: 8 между четырьмя обобщенными плотностями. Если мы создадим изображение размером 36 × 36 пикселей для устройства с разрешением ldpi, размер изображений для остальных плотностей будет 48 × 48 для точек на дюйм, 72 × 72 для точек на дюйм и 96 × 96 для точек на дюйм.

Как создать пользовательский интерфейс Android-приложений в Photoshop

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

По определению Android, 1pd равен 1px при 160 dpi устройства (мдпи). Поэтому мы хотим разработать приложение для Android для xlarge Android-устройства с плотностью mdpi. Мы можем определить размер нашего пользовательского интерфейса в пикселях как 960 пикселей по ширине и 720 пикселей по высоте; Следуя тому же правилу сопоставления, мы можем получить рекомендации по дизайну пользовательского интерфейса для размера приложения Android:

Размер экрана приложения Android в соответствии с указаниями в пикселях

ДОБАВЛЕНО : Если вы также заинтересованы в «гибком» пользовательском интерфейсе, взгляните на эту библиотеку: Android SDK, который предоставляет новый размер блока - sdp (масштабируемый dp). Эта единица измерения размера зависит от размера экрана (это также упоминалось в ответе о SDPбиблиотеке)

ДОБАВЛЕНО2 Компания Google наконец-то поняла полезность концепции пользовательского интерфейса iOS Storeboard, и теперь речь идет ConstraintLayoutо мире Android: создайте отзывчивый пользовательский интерфейс с ConstraintLayout

Mixaz
источник
32

1) dp: (density independent pixels)

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


2) sp: (scale independent pixels)

Эта единица измерения масштабируется в соответствии с dpi экрана (аналогично dp), а также предпочтениями размера шрифта пользователя.


3) px: (pixels)

Фактические пиксели или точки на экране.


Для более подробной информации вы можете посетить

Руководство разработчика Android> Руководство разработчика Android Dimension
> Экраны

IntelliJ Amiya
источник
29

Размер экрана в Android сгруппированы по категориям ldpi, mdpi, hdpi, xhdpi, xxhdpiи xxxhdpi. Плотность экрана - это количество пикселей в пределах области (например, дюйма) экрана. Обычно измеряется в точках на дюйм ( dpi).

PX(Pixels):

  • наш обычный стандартный пиксель, который отображается на пиксель экрана. pxпредназначен для абсолютных пикселей. Это используется, если вы хотите указать абсолютные пиксели для ширины или высоты. Не рекомендуется.

DP/DIP(Density pixels / Density independent pixels):

  • dip == dp, В более ранних версиях Android использовался dip, а затем был изменен на dp. Это альтернатива px.

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

  • dpНастоятельно рекомендуется использовать вместо px. Используйте, dpесли вы хотите указать ширину и высоту, чтобы динамически увеличиваться и уменьшаться в зависимости от размеров экрана.

  • если мы дадим dp/dip, Android автоматически рассчитает размер пикселя на основе экрана размером 160 пикселей.

SP(Scale independent pixels):

  • масштабируется в зависимости от размера шрифта пользователя. Шрифты следует использовать sp.

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

Документация Android гласит:

при указании размеров всегда используйте либо единицы, dpлибо spединицы измерения. A dpявляется независимым от плотности пикселем, который соответствует физическому размеру пикселя на 160 dpi. An sp- это та же базовая единица, но масштабируется в соответствии с предпочтительным размером текста пользователя (это независимый от масштаба пиксель), поэтому вам следует использовать эту единицу измерения при определении размера текста

Раджеш
источник
21

Экран мобильного телефона состоит из тысяч крошечных точек, известных как пиксели (px) . Пиксель - это самый маленький элемент, который делает изображение. Чем больше пикселей создает изображение или текст, тем резче оно становится и делает экран смартфона более читабельным.

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

Независимый от плотности пиксель (dp или dip) позволяет разработчику создавать ресурсы, которые отображаются ожидаемым образом, независимо от разрешения или плотности целевого устройства.

Плотно-независимый пиксель (dp или dip) равен одному пикселю при базовой плотности или 160 dpi (точек на дюйм).

1 px / 1dp = 160 точек на дюйм / 160 точек на дюйм

2 px / 1dp = 320 точек на дюйм (2x) / 160 точек на дюйм

где,

точек на дюйм это точек на дюйм

Таким образом, при разрешении 320 точек на дюйм 1 dp равен 2 пикселям.

формула

px / dp = dpi / 160 dpi

Количество точек на дюйм (dpi) - это показатель резкости (то есть плотности точек с подсветкой) на экране дисплея. Количество точек на дюйм для данного разрешения изображения будет различаться в зависимости от общего размера экрана, поскольку одинаковое количество пикселей распределяется по разному пространству.

Работа с независимыми от плотности пикселями помогает нам справиться с ситуацией, когда у вас есть два устройства с одинаковым разрешением пикселей, но разным объемом пространства. Предположим, что в данном случае планшет и телефон имеют одинаковое разрешение пикселей 1280 на 800 пикселей (160 точек на дюйм) и 800 на 1280 пикселей (320 точек на дюйм) соответственно.

Теперь, когда планшет имеет базовую плотность (160 точек на дюйм), его физические и независимые от плотности размеры пикселей одинаковы, 1280 на 800. Телефон с другой стороны имеет более высокую плотность пикселей, поэтому он имеет вдвое меньше независимых от плотности пикселей, чем физический. пиксели. Таким образом, телефон имеет плотность пикселей 400 на 640 независимых пикселей. Таким образом, использование независимого от плотности пикселя позволяет мысленно представить, что на планшете гораздо больше места, чем на телефоне.

Точно так же, если у вас есть два устройства с одинаковым размером экрана, но разной плотностью пикселей, скажем, одно - 800 на 1280 пикселей (320 точек на дюйм), а другое - 400 на 640 пикселей (160 точек на дюйм), нам не нужно определять полностью различные макеты для этих двух устройств, поскольку мы можем измерить активы с точки зрения плотности независимого пикселя, который одинаков для обоих устройств.

800 на 1280 пикселей (320 точек на дюйм) = 400 на 640 пикселей с независимой плотностью (dp)

400 на 640 пикселей (160 точек на дюйм) = 400 на 640 пикселей с независимой плотностью (dp)

Независимые от масштаба пиксели (sp) являются предпочтительной единицей измерения размера шрифта. В целях доступности Android позволяет пользователям настраивать размер шрифта своего устройства. Пользователи, у которых возникают проблемы с чтением текста, могут увеличить размер шрифта своего устройства. Обычно вы можете найти эту опцию в настройках дисплея на вашем телефоне или планшете под размер шрифта. Это часто также доступно через настройки доступности.

С пикселями, не зависящими от масштаба, 16 sp - это то же самое, что 16 dp, когда размер шрифта устройства нормальный или 100%. Но когда размер шрифта устройства большой, например 125%, значение 16 sp будет переводиться в 20 dp или в 1,25 раза 16.

Если вы используете dp в качестве единицы для размера шрифта, то этот фрагмент текста имеет определенный физический размер, независимо от того, настроил ли пользователь размер шрифта устройства. Использование юнитов sp сделает лучший опыт для людей с нарушениями зрения.

Ссылка : Udacity , Google

Android-разработчик
источник
19

sp: масштабный независимый пиксель

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

px: пиксель или элемент изображения - это единственная точка на экране

A.Saini
источник
19

Плотность пикселей

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

Расчет плотности пикселей

Количество пикселей, которые вписываются в дюйм, называется плотностью пикселей. Экраны высокой плотности имеют больше пикселей на дюйм, чем экраны низкой плотности ....

Количество пикселей, которые вписываются в дюйм, называется плотностью пикселей. Экраны высокой плотности имеют больше пикселей на дюйм, чем экраны низкой плотности. В результате элементы пользовательского интерфейса одинакового размера в пикселях выглядят больше на экранах с низкой плотностью и меньше на экранах с высокой плотностью.

Чтобы рассчитать плотность экрана, вы можете использовать это уравнение:

Плотность экрана = ширина экрана (или высота) в пикселях / ширина экрана (или высота) в дюймах

Высокая плотность по сравнению с дисплеями низкой плотности

Плотность независимости

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

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

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

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

  1. Экран низкой плотности отображается с независимостью плотности
  2. Экран высокой плотности отображается с независимостью плотности

Читать полный текст https://material.io/design/layout/pixel-density.html

лава-лава
источник
16

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

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

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

Всегда используйте только dp и sp. sp для размеров шрифта и dp для всего остального. Это сделает интерфейс совместимым для устройств Android с различной плотностью. Вы можете узнать больше о пикселях и dp из https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-

URL источника: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/

Лалит Васан
источник
15

Я хочу предоставить простой способ понять dp. На самом деле, я думаю, что dpэто самый простой для понимания. dpэто просто единица физической длины. Это того же измерения, что и mmили inch. Нам просто удобнее писать 50dp, 60dpа не 50/160 inchили 60/160 inch, потому что один dp- это 1/160 inchлюбой размер экрана или разрешение.

Единственная проблема заключается в том, что Android Dpi некоторых экранов не являются точными. Например, экран, классифицированный на 160 dpi, может действительно иметь 170 dpi. Таким образом, результат вычисления dpнечеткий. Это должно быть примерно так же, как 1/160 inch.

ProtossShuttle
источник