px Pixels - соответствует фактическим пикселям на экране.
в дюймах - в зависимости от физического размера экрана.
1 дюйм = 2,54 см
мм Миллиметры - в зависимости от физического размера экрана.
pt Points - 1/72 дюйма в зависимости от физического размера экрана.
дп или погружение Плотность -независимого пикселов - абстрактный блок , который основан на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому на экране с разрешением 160 точек на дюйм один пиксель составляет один пиксель. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание: компилятор принимает оба «dip» и «dp», хотя «dp» более соответствует «sp».
sp Scale- независимые пиксели - это как единица измерения dp, но также масштабируется в соответствии с предпочтениями размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были скорректированы как по плотности экрана, так и по предпочтениям пользователя.
несмотря на то, что они должны быть одинаковыми, у меня, как правило, много проблем с 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 для нескольких типов устройств, вам следует хотя бы раз прочитать документ по поддержке экранов. Кроме того, всегда полезно знать фактическое количество активных устройств с определенной конфигурацией экрана.
Итак, если вы используете 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управления. Вам потребуется создать изображения разного размера для поддерживаемых размеров экрана:
Как мы вычисляем пиксели для 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
PhysicalWidth1.5 inches 1.5 inches
DotsPerInch(“dpi”)160240Pixels(=width*dpi)240360Density(factor of baseline 160)1.01.5Density-independent pixels 240240(“dip”or“dp”or“dps”)Scale-independent pixels
(“sip”or“sp”)Depends on user font size settings same
Кроме того, вы должны иметь четкое представление о следующих понятиях:
Размер экрана:
Фактический физический размер, измеренный как диагональ экрана. Для простоты Android группирует все действительные размеры экрана в четыре обобщенных размера: маленький, нормальный, большой и очень большой.
Плотность экрана:
Количество пикселей в физической области экрана; обычно называется dpi (точек на дюйм). Например, экран «низкой» плотности имеет меньше пикселей в данной физической области по сравнению с экраном «нормальной» или «высокой» плотности. Для простоты Android группирует все фактические плотности экрана в четыре обобщенные плотности: низкая, средняя, высокая и сверхвысокая.
Ориентация:
Ориентация экрана с точки зрения пользователя. Это либо альбомная, либо книжная ориентация, что означает, что соотношение сторон экрана должно быть либо широким, либо высоким, соответственно. Имейте в виду, что разные устройства не только работают в разных ориентациях по умолчанию, но и могут меняться во время выполнения, когда пользователь поворачивает устройство.
Разрешение:
Общее количество физических пикселей на экране. При добавлении поддержки нескольких экранов приложения не работают напрямую с разрешением; приложения должны касаться только размера и плотности экрана, как это определено обобщенными группами размеров и плотности.
Плотно-независимый пиксель (dp):
Виртуальный пиксельный модуль, который следует использовать при определении макета пользовательского интерфейса, чтобы выражать размеры или положение макета независимым от плотности способом. Независимый от плотности пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовой плотностью, принятой системой для экрана «средней» плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование единиц измерения dp по мере необходимости на основе фактической плотности используемого экрана. Преобразование единиц dp в пиксели экрана очень просто: px = dp * (dpi / 160). Например, на экране с разрешением 240 dpi 1 dp равен 1,5 физических пикселей. Вы должны всегда использовать единицы измерения dp при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.
Значит ли это, что все, что вы разрабатываете с использованием модулей dp, всегда будет занимать один и тот же% экрана независимо от плотности пикселей устройства? Предполагая идентичные пропорции.
DBIT
199
dpесть dip. Используйте его для всего (поля, отступы и т. Д.).
Используйте только spдля {text-size}.
Чтобы получить одинаковый размер на разных плотностях экрана, Android переводит эти единицы в пиксели во время выполнения, поэтому вам не придется делать сложную математику.
Чувствуете разницу между px, dpи spна различных размеров экрана.
xxxhdpi (экстра-экстра-экстра-высокий) ~ 640 точек на дюйм
dip или dp являются независимыми от плотности пикселями , т.е. они соответствуют большему или меньшему количеству пикселей в зависимости от физической плотности.
1dp = 1px на mdpi
sp или sip - это независимый от масштаба пиксель . Они масштабируются при включении опции « Большой текст» в Settings>Accessibility
Источник 3 : (данные из источника 3 приведены ниже)
Это значения измерений, определенные в XML. Размерность указывается числом, за которым следует единица измерения. Например: 10px, 2in, 5sp. Android поддерживает следующие единицы измерения:
дп
Плотно-независимые пиксели - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм (точек на дюйм), на котором 1dp приблизительно равен 1px. При работе на экране с более высокой плотностью число пикселей, используемых для рисования 1dp, увеличивается с коэффициентом, соответствующим dpi экрана. Аналогично, когда на экране с более низкой плотностью, количество пикселей, используемых для 1dp, уменьшается. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Использование dp-единиц (вместо px-единиц) - это простое решение для правильного изменения размеров видов в макете для разных плотностей экрана. Другими словами, он обеспечивает согласованность с реальными размерами ваших элементов пользовательского интерфейса на разных устройствах.
зр
Пиксели, не зависящие от масштаба - это похоже на единицу измерения dp, но также масштабируется в соответствии с предпочтениями размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были отрегулированы как по плотности экрана, так и по предпочтениям пользователя.
пт
Очки - 1/72 дюйма в зависимости от физического размера экрана.
ПВ
Пиксели - соответствует фактическим пикселям на экране. Эта единица измерения не рекомендуется, потому что фактическое представление может варьироваться в зависимости от устройства; Каждое устройство может иметь различное количество пикселей на дюйм и может иметь больше или меньше доступных пикселей на экране.
мм
Миллиметры - в зависимости от физического размера экрана.
в
Дюймы - в зависимости от физического размера экрана.
Примечание. Измерение - это простой ресурс, на который ссылается значение, указанное в атрибуте имени (а не в имени файла XML). Таким образом, вы можете комбинировать ресурсы измерений с другими простыми ресурсами в одном XML-файле под одним элементом.
Пиксели - соответствует фактическим пикселям на экране.
дп или провал
Плотно-независимые пиксели - это абстрактные единицы, основанные на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому на экране с разрешением 160 точек на дюйм один пиксель составляет один пиксель.
Использование дп:
Независимость от плотности - Ваше приложение достигает «независимости от плотности», когда оно сохраняет физический размер (с точки зрения пользователя) элементов пользовательского интерфейса при отображении на экранах с различной плотностью. (т.е.) изображение должно выглядеть одинаково (не увеличено или уменьшено) на разных типах экранов.
зр
Пиксели, не зависящие от масштаба - это похоже на единицу измерения 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 Nexus4.If24 pixels to be converted to dp andif it is a Nexus4 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 or320dpi)Optional(screen size):4.7" diagonal
Попробуйте получить все значения пикселей в четных числах от творческой группы. В противном случае потеря точности произойдет при умножении на 0,5.
ПВ
Это объяснено выше. Старайтесь избегать в макете файлов. Но в некоторых случаях требуется px. например, разделительная линия ListView. px лучше использовать для выделения однопиксельной линии в качестве разделителя для всех разрешений экрана.
зр
Используйте sp для размеров шрифта. Тогда только шрифт внутри приложения будет изменяться при изменении размера шрифтов устройства (то есть, Отображение -> Шрифты на устройстве). Если вы хотите сохранить шрифт статического размера внутри приложения, вы можете указать размер шрифта в dp. В таком случае это никогда не изменится. Разработчики могут получить такое требование для некоторых конкретных экранов, для этого разработчики могут использовать dp вместо sp. Во всех остальных случаях рекомендуется sp.
Вы можете увидеть разницу между pxи dpизображенный на картинке, и вы также можете найти , что pxи dpне может гарантировать те же физические размеры на разных экранах.
@EnesBattal, я думаю, потому что ДП не является острым физическим размером, это приблизительное значение. Цитата из CapTech: «dp - это единица, не зависящая от плотности, однако физический размер одного« dp »только приблизительно одинаков для каждой плотности экрана. В дюйме приблизительно 160« dp ». Коэффициент масштабирования, зависящий от в области плотности устройства, применяется для преобразования «dp» в число пикселей с разрешением 160 точек на дюйм. Число пикселей, на которое переводится один «dp», варьируется в зависимости от плотности пикселей на экране и области плотности, на которую устройство падает. в."
Зефир
3
@RuchirBaronia, я думаю, что DP или DIP все еще находятся внутри apk, потому что apk еще не знает, с какой плотностью экрана он будет работать, поэтому независимость устройства должна сохраняться.
Зефир
79
Все, что связано с размером текста и внешним видом должно использовать spили pt. Принимая во внимание, что все, что связано с размером элементов управления, макетов и т. Д. Должно использоваться с dp.
Вы можете использовать как dpи dipна своих местах.
Существует много разговоров об использовании «sp» для размеров шрифта, и хотя я ценю это, я не думаю, что это правильно с точки зрения дизайна. Вы можете в конечном итоге нарушить свой дизайн, если у пользователя будет какой-то неудачный выбор размера шрифта, и в итоге пользователь будет винить приложение , а не свой собственный жизненный выбор.
Кроме того, если вы возьмете приложение sp-font на планшете с разрешением 160 точек на дюйм, вы обнаружите, что все масштабируется ... кроме вашего шрифта, который будет выглядеть крошечным в сравнении. Это не очень хорошо выглядит.
Хотя идея «sp» шрифтов имеет хорошее сердце, это плохая идея. Палка с дп для всего.
Вы знаете, что масштабный коэффициент шрифта применяется к 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 пикселя знания, инженер-программист может проектировать макеты для разных плотностей.
Чтобы проверить параметры экрана любого устройства:
Я ответил относительно перспективы макета. Пожалуйста, прочитайте ссылку, которую вы предоставили ", поэтому вы должны использовать эту единицу измерения при определении размера текста (но не для размеров макета)".
Кушал
Вопрос был «Разница между px, dp, dip и sp в Android?» Ваш ответ сказал: «Мы должны избегать использования sp». Там не было никакого упоминания о «перспективе макета» нигде
ci_
Да .. дп и дип одинаковы ... используются взаимозаменяемо ... мой ответ решить ваш запрос?
Кушал
61
Различие между dpи spединицами, указанными как « предпочтение размера шрифта пользователя » ответами, скопированными из официальной документации, можно увидеть во время выполнения, изменив Settings->Accessibility->Large Textпараметр.
Large Textопция заставляет текст стать в 1.3разы больше.
Размер экрана в 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.
Пожалуйста, прочитайте ответ от сообщества вики. Ниже упомянута некоторая информация, которая должна быть рассмотрена в дополнение к вышеупомянутым ответам. Большинство разработчиков 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 для пользовательского шрифта может занять несколько пикселей больше, чем шрифт по умолчанию.
Я наткнулся на хорошую статью о разработке пользовательского интерфейса приложений Android для разных разрешений экрана, и я хотел бы оставить ее здесь только для тех, кто ищет в этой области. Да, я знаю, что это как-то описано в Google Docs (и упоминается в постах выше), я читал это, но это было нехорошо для меня (да, я могу быть слишком глупым)). Мне оставалось неясным, как создавать макеты, способные работать с экранами разного размера. Я ненавижу концепцию DP и так далее, когда мне нужно реализовать «гибкий» макет интерфейса для разных экранов. (Привет, разработчики iOS - да, вы правы, это концепция раскадровки).
У Android неплохая концепция пользовательского интерфейса, но, к сожалению, в нем нет функций iOS Storyboard. Разработка гибкого пользовательского интерфейса в Android - вещь не из легких (в лучшем случае).
Вот статья, которая помогла мне понять, что делать в Android, чтобы создавать макеты для экрана разных размеров:
Как разработать пользовательский интерфейс для приложений Android для экрана другого размера
Для разработки пользовательского интерфейса приложения для экранов разных размеров наш первоначальный дизайн должен соответствовать минимально необходимому пространству для каждого размера экрана. Android определяет минимальный размер (в dp) для каждого обобщенного типа экрана. Вот руководство по размеру экрана Android.
Когда мы получаем размер экрана в dp, нам не достаточно разработать пользовательский интерфейс приложения для 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:
Количество пикселей, представленных в одной единице dp, будет увеличиваться с увеличением разрешения экрана (когда у вас больше точек / пикселей на дюйм). И наоборот, на устройствах с более низким разрешением количество пикселей, представленных в единицах dp, будет уменьшаться. Поскольку это относительная единица, она должна иметь базовую линию для сравнения. Эта базовая линия - экран с разрешением 160 точек на дюйм. Это уравнение:px = dp * (dpi / 160).
2) sp: (scale independent pixels)
Эта единица измерения масштабируется в соответствии с dpi экрана (аналогично dp), а также предпочтениями размера шрифта пользователя.
Размер экрана в 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- это та же базовая единица, но масштабируется в соответствии с предпочтительным размером текста пользователя (это независимый от масштаба пиксель), поэтому вам следует использовать эту единицу измерения при определении размера текста
Экран мобильного телефона состоит из тысяч крошечных точек, известных как пиксели (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 сделает лучший опыт для людей с нарушениями зрения.
Вы должны использовать его с текстами, потому что он автоматически масштабируется в соответствии с размером шрифта, который используется пользователем на его устройстве.
px: пиксель или элемент изображения - это единственная точка на экране
Плотность и разрешение экрана зависят от платформы. Независимые от устройства пиксели и масштабируемые пиксели являются единицами, которые обеспечивают гибкий способ размещения дизайна на разных платформах.
Расчет плотности пикселей
Количество пикселей, которые вписываются в дюйм, называется плотностью пикселей. Экраны высокой плотности имеют больше пикселей на дюйм, чем экраны низкой плотности ....
Количество пикселей, которые вписываются в дюйм, называется плотностью пикселей. Экраны высокой плотности имеют больше пикселей на дюйм, чем экраны низкой плотности. В результате элементы пользовательского интерфейса одинакового размера в пикселях выглядят больше на экранах с низкой плотностью и меньше на экранах с высокой плотностью.
Чтобы рассчитать плотность экрана, вы можете использовать это уравнение:
Плотность экрана = ширина экрана (или высота) в пикселях / ширина экрана (или высота) в дюймах
Плотность независимости
Плотность и разрешение экрана зависят от платформы. Независимые от устройства пиксели и масштабируемые пиксели являются единицами, которые обеспечивают гибкий способ размещения дизайна на разных платформах.
Расчет плотности пикселей Число пикселей, которые умещаются в дюймах, называется плотностью пикселей . Экраны высокой плотности имеют больше пикселей на дюйм, чем экраны низкой плотности ....
Независимость от плотности относится к равномерному отображению элементов пользовательского интерфейса на экранах с различной плотностью.
Плотно-независимые пиксели , обозначаемые как dp (произносится как « провалы »), являются гибкими единицами, которые масштабируются, чтобы иметь одинаковые размеры на любом экране. В интерфейсах материалов используются пиксели, не зависящие от плотности, для последовательного отображения элементов на экранах с различной плотностью.
Экран низкой плотности отображается с независимостью плотности
Экран высокой плотности отображается с независимостью плотности
Pixels (px) - соответствует фактическим пикселям на экране. Это используется, если вы хотите указать абсолютные пиксели для ширины или высоты.
Плотно-независимые пиксели (dp или dip) - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому на экране с разрешением 160 точек на дюйм один пиксель составляет один пиксель. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание: компилятор принимает оба «dip» и «dp», хотя «dp» больше соответствует «sp».
Независимые от масштаба пиксели (sp) - это похоже на единицу измерения dp, но также масштабируется в соответствии с предпочтениями размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были отрегулированы как по плотности экрана, так и по предпочтениям пользователя.
Я хочу предоставить простой способ понять 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.
px
,dp
иsp
Ответы:
Из документации разработчика Android :
Из понимания независимости плотности в Android :
Дополнительную информацию также можно найти в документации по дизайну Google .
источник
dp
вовсе не имеют точно такую же физическую длину. (Хотя это близко.) См. Комментарий @ Fraggle о ведении. Это означает, что 48dp будет примерно 8 мм (0,3 дюйма), но может варьироваться до 11 мм.Практически все об этом и о том, как добиться наилучшей поддержки нескольких экранов разных размеров и плотности, очень хорошо документировано здесь:
Если вы серьезно относитесь к разработке приложения для Android для нескольких типов устройств, вам следует хотя бы раз прочитать документ по поддержке экранов. Кроме того, всегда полезно знать фактическое количество активных устройств с определенной конфигурацией экрана.
источник
Я подробнее расскажу о том, как именно dp конвертируется в px:
150 x 150 px
изображение будет занимать место150 * 150 dp
на экране.150 x 150 px
изображение будет занимать место100 * 100 dp
на экране.150x150 px
изображение будет занимать место75 * 75 dp
на экране.И наоборот: скажем, вы хотите добавить изображение в ваше приложение, и вам нужно, чтобы оно заполнило элемент
100 * 100 dp
управления. Вам потребуется создать изображения разного размера для поддерживаемых размеров экрана:100 * 100 px
изображение для mdpi150 * 150 px
изображение для HDDP200 * 200 px
изображение для xhdpiисточник
px - Pixels - точка на шкале соответствует фактическим пикселям на экране.
я - дюймы - в зависимости от физического размера экрана.
мм - миллиметры - в зависимости от физического размера экрана.
pt - Точки - 1/72 дюйма в зависимости от физического размера экрана.
dp - Плотность-независимые пиксели - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому один экран на экране с разрешением 160 точек на дюйм
dp
составляет один пиксель. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание. Компилятор принимаетdip
и тоdp
, иdp
другое , хотя и более соответствуетsp
.sp - независимые от масштаба пиксели - это как
dp
единицу, но также масштабируется в соответствии с предпочтением размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были отрегулированы как по плотности экрана, так и по предпочтениям пользователя.Возьмем пример двух экранов одинакового размера, но один имеет плотность экрана 160 точек на дюйм (точек на дюйм, то есть пикселей на дюйм), а другой - 240 точек на дюйм.
источник
Кроме того, вы должны иметь четкое представление о следующих понятиях:
Размер экрана:
Плотность экрана:
Ориентация:
Разрешение:
Плотно-независимый пиксель (dp):
Ссылка: сайт разработчиков Android
источник
dp
естьdip
. Используйте его для всего (поля, отступы и т. Д.).Используйте только
sp
для {text-size}.Чтобы получить одинаковый размер на разных плотностях экрана, Android переводит эти единицы в пиксели во время выполнения, поэтому вам не придется делать сложную математику.
Чувствуете разницу между
px
,dp
иsp
на различных размеров экрана.Источник: Android Программирование: Руководство ранчо Большого ботаника
источник
Я вычислил формулу ниже , чтобы сделать переходы
dpi
кdp
иsp
источник
Определения
px или точка - это пиксель на физическом экране.
dpi - это пиксели на дюйм на физическом экране, которые представляют собой плотность дисплея.
Android дает псевдонимы с несколькими значениями плотности
dip или dp являются независимыми от плотности пикселями , т.е. они соответствуют большему или меньшему количеству пикселей в зависимости от физической плотности.
sp или sip - это независимый от масштаба пиксель . Они масштабируются при включении опции « Большой текст» в Settings>Accessibility
Что использовать?
источник
Источник 1
Источник 2
Источник 3 : (данные из источника 3 приведены ниже)
Примечание. Измерение - это простой ресурс, на который ссылается значение, указанное в атрибуте имени (а не в имени файла XML). Таким образом, вы можете комбинировать ресурсы измерений с другими простыми ресурсами в одном XML-файле под одним элементом.
источник
По существу, единственный раз, когда применяется px, это один px, и это если вы хотите, чтобы на экране был ровно один пиксель, как в случае делителя:
При> 160 dpi вы можете получить 2-3 пикселя,
При> 120 dpi оно округляется до 0.
источник
ПВ
Пиксели - соответствует фактическим пикселям на экране.
дп или провал
Плотно-независимые пиксели - это абстрактные единицы, основанные на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому на экране с разрешением 160 точек на дюйм один пиксель составляет один пиксель.
Использование дп:
Независимость от плотности - Ваше приложение достигает «независимости от плотности», когда оно сохраняет физический размер (с точки зрения пользователя) элементов пользовательского интерфейса при отображении на экранах с различной плотностью. (т.е.) изображение должно выглядеть одинаково (не увеличено или уменьшено) на разных типах экранов.
зр
Пиксели, не зависящие от масштаба - это похоже на единицу измерения dp, но также масштабируется в соответствии с предпочтением размера шрифта пользователя.
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
источник
Где использовать что и отношения между px и dp?
Плотно-независимый пиксель (dp)
Виртуальный пиксельный модуль, который следует использовать при определении макета пользовательского интерфейса, чтобы выражать размеры или положение макета независимым от плотности способом. Как описано выше, независимый от плотности пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовой плотностью, принятой системой для экрана «средней» плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование единиц измерения dp по мере необходимости на основе фактической плотности используемого экрана. Преобразование единиц измерения в пиксели экрана очень просто:
px = dp * (dpi / 160).
Например, на экране с разрешением 240 dpi 1 dp равен 1,5 физических пикселей. Вы должны всегда использовать единицы измерения dp при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.
Понимание пикселя в dp и наоборот очень важно (особенно для точного определения значений dp для творческой команды)
ПВ
Это объяснено выше. Старайтесь избегать в макете файлов. Но в некоторых случаях требуется px. например, разделительная линия ListView. px лучше использовать для выделения однопиксельной линии в качестве разделителя для всех разрешений экрана.
зр
Используйте sp для размеров шрифта. Тогда только шрифт внутри приложения будет изменяться при изменении размера шрифтов устройства (то есть, Отображение -> Шрифты на устройстве). Если вы хотите сохранить шрифт статического размера внутри приложения, вы можете указать размер шрифта в dp. В таком случае это никогда не изменится. Разработчики могут получить такое требование для некоторых конкретных экранов, для этого разработчики могут использовать dp вместо sp. Во всех остальных случаях рекомендуется sp.
источник
Вы можете увидеть разницу между
px
иdp
изображенный на картинке, и вы также можете найти , чтоpx
иdp
не может гарантировать те же физические размеры на разных экранах.источник
Все, что связано с размером текста и внешним видом должно использовать
sp
илиpt
. Принимая во внимание, что все, что связано с размером элементов управления, макетов и т. Д. Должно использоваться сdp
.Вы можете использовать как
dp
иdip
на своих местах.источник
Я бы использовал только дп.
Существует много разговоров об использовании «sp» для размеров шрифта, и хотя я ценю это, я не думаю, что это правильно с точки зрения дизайна. Вы можете в конечном итоге нарушить свой дизайн, если у пользователя будет какой-то неудачный выбор размера шрифта, и в итоге пользователь будет винить приложение , а не свой собственный жизненный выбор.
Кроме того, если вы возьмете приложение sp-font на планшете с разрешением 160 точек на дюйм, вы обнаружите, что все масштабируется ... кроме вашего шрифта, который будет выглядеть крошечным в сравнении. Это не очень хорошо выглядит.
Хотя идея «sp» шрифтов имеет хорошее сердце, это плохая идея. Палка с дп для всего.
источник
sp
фактору, верно? Все, что влияетdp
, также повлияетsp
. Тем не менее, по-прежнему предпочтительнее указывать размеры шрифта, используяdp
вместо того,sp
чтобы ваш макет был очень узким и большие размеры не подходили - лучше, чтобы текст был меньше, чем того хочет пользователь, в полностью испорченном макете. Но в первую очередь вы всегда должны стремиться соблюдать предпочтения размера шрифта пользователя - даже самый большой параметр не слишком большой.sp = масштабно независимый пиксель
dp = dip = плотность независимых пикселей
точек на дюйм = точек на дюйм
Android поддерживает разные разрешения экрана
Устройство с разрешением 120 dp ldpi имеет размер 120 пикселей в 1 дюйме.
То же самое для других плотностей ...
Мы, как разработчики программного обеспечения, должны использовать эту формулу преобразования:
Таким образом, у 1 dp устройства с разрешением 240 точек на дюйм будет = 1 * (240/160) = 3/2 = 1,5 пикселя.
И 1 dp устройства с разрешением 480 точек на дюйм будет иметь = 1 * (480/160) = 3 пикселя.
Используя эти 1,5 и 3 пикселя знания, инженер-программист может проектировать макеты для разных плотностей.
Чтобы проверить параметры экрана любого устройства:
источник
Различие между
dp
иsp
единицами, указанными как « предпочтение размера шрифта пользователя » ответами, скопированными из официальной документации, можно увидеть во время выполнения, изменивSettings->Accessibility->Large Text
параметр.Large Text
опция заставляет текст стать в1.3
разы больше.Конечно, это может зависеть от поставщика, поскольку оно находится в пакетах / приложениях / настройках .
источник
точек на дюйм -
px - пиксель
баллы - баллы
в дюймах - относительно физического размера экрана (1 дюйм = 2,54 см).
мм-миллиметр - относительно физического размера экрана.
sp - масштабно-независимый пиксель.
падение -
В стандарте используются dp и sp. sp для размера шрифта и dp для всего остального.
Формула для пересчета единиц:
источник
Вот формула, используемая Android:
Где dpi - одна из следующих плотностей экрана. Для списка всех возможных плотностей перейдите сюда
Он определяет константы "DENSITY_ *".
Взято отсюда .
Это поможет разобраться во многих путаницах при переводе между px и dp, если вы знаете разрешение экрана.
Итак, допустим, вы хотите изображение с разрешением 60 dp для экрана hdpi, тогда физический размер пикселя 60 dp:
источник
Размер экрана в
Android
сгруппирована по категориямsmall
,medium
,large
,extra large
,double-extra
иtriple-extra
. Плотность экрана - это количество пикселей в пределах области (например, дюйма) экрана. Обычно измеряется в точках на дюйм (dpi). Плотность экрана сгруппирована как низкая, средняя, высокая и сверхвысокая. Разрешение - это общее количество пикселей на экране.Формула для преобразования между единицами
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 изображение займет,
Вы можете использовать следующий калькулятор DPI, чтобы исправить размеры изображения и другие размеры, когда вы хотите иметь единый дизайн интерфейса на всех устройствах Android.
Калькулятор DPI в Java
Более подробную информацию смотрите по следующей ссылке.
http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/
источник
Пожалуйста, прочитайте ответ от сообщества вики. Ниже упомянута некоторая информация, которая должна быть рассмотрена в дополнение к вышеупомянутым ответам. Большинство разработчиков Android упускают это при разработке приложений, поэтому я добавляю эти моменты.
sp = масштабно независимый пиксель
dp = плотность независимых пикселей
dpi = плотность пикселей
Я прошел через вышеупомянутые ответы ... не находя их точно правильными. sp для размера текста, dp для границ макета - стандартный. Но sp для размера текста нарушит макет, если небрежно использовать его на большинстве устройств.
sp принимает текстовый формат устройства, а dp - стандарт плотности устройства (никогда не меняются в устройстве). Скажем, текст 100sp может занимать 80% экрана или 100% экрана в зависимости от размера шрифта, установленного в устройстве.
Вы также можете использовать sp для границ макета, это будет работать :) Нет стандартного приложения, использующего sp для всего текста
Используйте sp и dp для размера текста с учетом UX.
Некоторые люди используют огромный размер шрифта в своем телефоне для большей читабельности, поэтому небольшая жестко закодированный размер текста будет проблемой UX. Поместите sp для текста, где это необходимо, но убедитесь, что он не нарушит макет, когда пользователь изменит свои настройки.
Аналогично, если у вас есть одно приложение, поддерживающее все измерения, добавление ресурсов xxxhdpi значительно увеличивает размер приложения. Но теперь телефоны xxxhdpi распространены, поэтому мы должны включить активы xxxhdpi как минимум для значков на боковой панели, панели инструментов и нижней панели. Лучше перейти к векторным изображениям, чтобы получить однородные и более качественные изображения для всех размеров экрана.
Также обратите внимание, что люди используют собственный шрифт в своем телефоне. Таким образом, отсутствие шрифта может вызвать проблемы с пробелами и все такое. Скажем, размер шрифта 12sp для пользовательского шрифта может занять несколько пикселей больше, чем шрифт по умолчанию.
Обратитесь на сайт разработчика Google для получения информации о размерах экрана и базовой плотности для Android. https://developer.android.com/training/multiscreen/screendensities
источник
Обычно sp используется для размеров шрифта, тогда как dip используется (также называемый dp) для других.
источник
Я наткнулся на хорошую статью о разработке пользовательского интерфейса приложений Android для разных разрешений экрана, и я хотел бы оставить ее здесь только для тех, кто ищет в этой области. Да, я знаю, что это как-то описано в Google Docs (и упоминается в постах выше), я читал это, но это было нехорошо для меня (да, я могу быть слишком глупым)). Мне оставалось неясным, как создавать макеты, способные работать с экранами разного размера. Я ненавижу концепцию DP и так далее, когда мне нужно реализовать «гибкий» макет интерфейса для разных экранов. (Привет, разработчики iOS - да, вы правы, это концепция раскадровки).
У Android неплохая концепция пользовательского интерфейса, но, к сожалению, в нем нет функций iOS Storyboard. Разработка гибкого пользовательского интерфейса в Android - вещь не из легких (в лучшем случае).
Вот статья, которая помогла мне понять, что делать в Android, чтобы создавать макеты для экрана разных размеров:
Блог JMSTUDIO: - Определите размер экрана приложения для Android
ДОБАВЛЕНО : Если вы также заинтересованы в «гибком» пользовательском интерфейсе, взгляните на эту библиотеку: Android SDK, который предоставляет новый размер блока - sdp (масштабируемый dp). Эта единица измерения размера зависит от размера экрана (это также упоминалось в ответе о
SDP
библиотеке)ДОБАВЛЕНО2 Компания Google наконец-то поняла полезность концепции пользовательского интерфейса iOS Storeboard, и теперь речь идет
ConstraintLayout
о мире Android: создайте отзывчивый пользовательский интерфейс с ConstraintLayoutисточник
1)
dp: (density independent pixels)
Количество пикселей, представленных в одной единице dp, будет увеличиваться с увеличением разрешения экрана (когда у вас больше точек / пикселей на дюйм). И наоборот, на устройствах с более низким разрешением количество пикселей, представленных в единицах dp, будет уменьшаться. Поскольку это относительная единица, она должна иметь базовую линию для сравнения. Эта базовая линия - экран с разрешением 160 точек на дюйм. Это уравнение:
px = dp * (dpi / 160).
2)
sp: (scale independent pixels)
Эта единица измерения масштабируется в соответствии с dpi экрана (аналогично dp), а также предпочтениями размера шрифта пользователя.
3)
px: (pixels)
Фактические пиксели или точки на экране.
Для более подробной информации вы можете посетить
источник
Размер экрана в 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 гласит:
источник
Экран мобильного телефона состоит из тысяч крошечных точек, известных как пиксели (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
источник
Вы должны использовать его с текстами, потому что он автоматически масштабируется в соответствии с размером шрифта, который используется пользователем на его устройстве.
источник
Плотность пикселей
Плотность и разрешение экрана зависят от платформы. Независимые от устройства пиксели и масштабируемые пиксели являются единицами, которые обеспечивают гибкий способ размещения дизайна на разных платформах.
Расчет плотности пикселей
Количество пикселей, которые вписываются в дюйм, называется плотностью пикселей. Экраны высокой плотности имеют больше пикселей на дюйм, чем экраны низкой плотности ....
Количество пикселей, которые вписываются в дюйм, называется плотностью пикселей. Экраны высокой плотности имеют больше пикселей на дюйм, чем экраны низкой плотности. В результате элементы пользовательского интерфейса одинакового размера в пикселях выглядят больше на экранах с низкой плотностью и меньше на экранах с высокой плотностью.
Чтобы рассчитать плотность экрана, вы можете использовать это уравнение:
Плотность экрана = ширина экрана (или высота) в пикселях / ширина экрана (или высота) в дюймах
Плотность независимости
Плотность и разрешение экрана зависят от платформы. Независимые от устройства пиксели и масштабируемые пиксели являются единицами, которые обеспечивают гибкий способ размещения дизайна на разных платформах.
Расчет плотности пикселей Число пикселей, которые умещаются в дюймах, называется плотностью пикселей . Экраны высокой плотности имеют больше пикселей на дюйм, чем экраны низкой плотности ....
Независимость от плотности относится к равномерному отображению элементов пользовательского интерфейса на экранах с различной плотностью.
Плотно-независимые пиксели , обозначаемые как dp (произносится как « провалы »), являются гибкими единицами, которые масштабируются, чтобы иметь одинаковые размеры на любом экране. В интерфейсах материалов используются пиксели, не зависящие от плотности, для последовательного отображения элементов на экранах с различной плотностью.
Читать полный текст https://material.io/design/layout/pixel-density.html
источник
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/
источник
Я хочу предоставить простой способ понять
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
.источник