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


Answers

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

  • Поддержка нескольких экранов

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

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

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

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

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

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

  • Размеры экрана и плотность
Question

В чем разница между:

  • px
  • dip
  • dp и
  • sp



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

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

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

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

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

sp Scale - независимые пиксели - это похоже на блок 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




Источник 1

Источник 2

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

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

дп

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

зр

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

пт

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

ПВ

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

мм

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

в

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

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




В основном единственный раз, когда px применяется, равен одному пикселю, и это, если вы хотите, чтобы на экране был ровно один пиксель, как в случае разделителя. Вкл.> 160 вы можете получить 2-3 пикселя, а по 120dpi - округлить до 0.




ПВ

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

dp или dip

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

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

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

зр

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

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




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

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




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

Опция « Large Text заставляет текст увеличиваться в 1.3 раза.

private static final float LARGE_FONT_SCALE = 1.3f;

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




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 - одна из следующих плотностей экрана. Список всех возможных плотностей можно найти в http://developer.android.com/reference/android/util/DisplayMetrics.html . Он определяет константы «DENSITY_ *».

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

Взято из http://developer.android.com/guide/practices/screens_support.html .

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

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

px = 60 * (240/160)




SP = шкала не зависит пикселей

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

точки на дюйм = пиксели плотности

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

зр принимать TEXTSIZE устройства, в то время как дп не считать, что стандарт плотности устройства (не изменяется в устройстве) Say 100sp текст может занимает 80% экран или 100% от экрана в зависимости от размера шрифта, установленных в устройстве

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

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

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

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




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

PX(Pixels):

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

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

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

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

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

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

SP(Scale independent pixels):

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

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

Android Документация говорит:

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




Экран мобильного телефона состоит из тысяч крошечных точек , известных как пикселей (точек) .A Пиксель является наименьшим элементом , который идет , чтобы сделать picture.The больше количество пикселей , чтобы сделать снимок или формулировку, тем острее его становится и делает экран смартфона более легко readable.Screen разрешение измеряется в терминах количества пикселей на разрешении screen.Screen обычно используется спецификация при покупке устройства, но на самом деле это не то, что полезно при проектировании для андроида , потому что думают о экранах условия пикселей игнорируют понятие физического размера, что для сенсорного устройства действительно очень важно.

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

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

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

где,

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

Так, при 320 точек на дюйм, 1DP равно 2 пикселей.

формула

ПВ / дп = дюйм / 160dpi

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

Работа с плотностью независимых пикселями помогают нам справиться с ситуацией, как, где у вас есть два устройства с одинаковым разрешением пикселей, но отличаясь количеством space.Suppose в случае, планшет и телефон имеют такое же разрешение пикселя 1280 на 800 пикселей (160 точек на дюйм) и 800 от 1280 пикселей (320 точек на дюйм) соответственно. Теперь, потому что таблетка по базовой плотности (160 точек на дюйм) его физические и плотности не зависит пикселей размеры являются одинаковыми, 1280 по 800.The телефону с другой стороны, имеет более высокую плотность пикселей, так что имеет в два раза меньше плотности независимых пикселей как физических пикселей. Так телефон имеет 400 по 640 плотности независимого pixels.So с использованием плотности независимого пикселя облегчает мысленно представить себе, что планшет имеет гораздо больше места, чем телефон.

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

800 на 1280 пикселей (320dpi) = 400 по 640 плотности независимого пикселя (DP)

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

Шкала независимых пикселей (SP) является предпочтительным блок для размера шрифта. В целях доступности для Android позволяет пользователям настраивать size.Users шрифта своего устройства , которые имеют проблемы с чтением текста может увеличить шрифт своего устройства size.You обычно может найти эту опцию в настройках дисплея на телефоне или планшете под шрифтом size.It часто также доступна через параметры доступности. С масштабных независимых пикселей, 16 зр точно так же , как и 16 дп , когда размер шрифта устройства является нормальным или 100% .Но , когда размер шрифта устройства является большим, например , 125%, 16 зр будет переводить до 20 дп или в 1,25 раза 16. Если вы используете дп в качестве единицы для размера шрифта, чем та часть текста имеет конкретный физический размер , независимо от того , имеет ли пользователь настроить размер шрифта устройства.Использование SP единиц будет сделать более удобным для людей с ослабленным зрением.

Ссылка : Udacity , Google




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

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

Применение

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

Он имеет эквивалентное значение в дп для каждого размера в 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>

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

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




Соотношение Dp-к-пиксель будет меняться с плотностью экрана, но не обязательно в прямой пропорции.

Примечание : компилятор принимает как « провал » и « дп », хотя « дп » больше соответствует « зр ».

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