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



15 Answers

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

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

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

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

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

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

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

android dp calculator

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

  • ПВ
  • падение
  • дп
  • зр



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

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

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

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

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

sp -Scale-independent Pixels - это похоже на блок 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



dp - dip . Используйте его для всего (маржа, прокладка и т. Д.).

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

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

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

Источник: Android-программирование: руководство Big Nerd Ranch




Определения

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

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

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

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

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

  • 1dp = 1px на mdpi

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

  • 1sp = 1dp
  • 1sp = 1,2dp с возможностью доступа Большой текст

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

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

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




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

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

На> 120 точек на дюйм округляется до 0.




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

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

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

px = dp * (dpi / 160).

Например, на экране с разрешением 240 точек на дюйм 1 дп равен 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.

ПВ

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

зр

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




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

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




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

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

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

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

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

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

  • ldpi (низкий) ~ 120 dpi
  • mdpi (средний) ~ 160 dpi
  • hdpi (высокая) ~ 240 dpi
  • xhdpi (extra-high) ~ 320 dpi
  • xxhdpi (extra-extra-high) ~ 480 dpi
  • xxxhdpi (extra-extra-extra-high) ~ 640 dpi

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

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

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

pixel = dp * (плотность / 160)

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

И 480 dpi устройства 1 dp будут иметь = 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();



dpi -

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

px - пиксель

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

pt - точки

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

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

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

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

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

dip -

  • dip == dp
  • Независимый от плотности пиксель.
  • Он варьируется в зависимости от плотности экрана.
  • В 160 dpi экран, 1 dp = 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  



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

px = dp * (dpi / 160)

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

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

  • ldpi (низкий) ~ 120dpi
  • mdpi (средний) ~ 160dpi
  • hdpi (высокий) ~ 240dpi
  • xhdpi (extra-high) ~ 320dpi
  • xxhdpi (extra-extra-high) ~ 480dpi
  • xxxhdpi (extra-extra-extra-high) ~ 640dpi

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

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

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

px = 60 * (240 / 160)



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

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

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

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

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

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

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

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

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

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

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




Размер экрана в 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, андроид автоматически вычислит размер пикселя на основе экрана размером 160 пикселей.

SP(Scale independent pixels):

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

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

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

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




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

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

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

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

1 px / 1dp = 160 dpi / 160 dpi

2 px / 1dp = 320 dpi (2x) / 160 dpi

где,

dpi - точки на дюйм

Таким образом, при 320 dpi, 1 dp равно 2 px.

формула

px / dp = dpi / 160dpi

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

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

Теперь, поскольку планшет имеет базовую плотность (160 dpi), его физические и плотности независимых размеров пикселей одинаковы, 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 дп или 1,25 раза 16.

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

Ссылка : Udacity , Google




SDP - блок масштабируемого размера - в основном это не блок, а размерные ресурсы для разного размера экрана.

Попробуйте библиотеку sdp от Intuit. Это очень удобно для решения проблем с блоком, и вы можете быстро поддерживать несколько экранов .

использование

android:paddingBottom="@dimen/_15sdp"для положительных и android:layout_marginTop="@dimen/_minus10sdp"для отрицательных sdp sdp

Он имеет эквивалентное значение в dp для каждого размера в values-sw<N>dpпапках (sw = smallestWidth).

Внимание

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

пример

<LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="@dimen/_minus10sdp"
          android:paddingBottom="@dimen/_15sdp"
          android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="♡"
                    android:textColor="#ED6C27"
                    android:textSize="@dimen/_70sdp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="U"
                    android:textColor="@android:color/black"
                    android:textSize="@dimen/_70sdp" />
            </LinearLayout>

Вы можете использовать db для размера текста, но я предпочитаю ssp для размера текста.

Подробнее см. На странице GitHub библиотеки .




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

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






Related