В чем разница между единицами измерения Android?
- ПВ
- падение
- дп
- зр
В чем разница между единицами измерения Android?
Ответы:
Из документации разработчика Android :
px
Pixels - соответствует фактическим пикселям на экране.
в
дюймах - в зависимости от физического размера экрана.
1 дюйм = 2,54 см
мм
Миллиметры - в зависимости от физического размера экрана.
pt
Points - 1/72 дюйма в зависимости от физического размера экрана.
дп или погружение
Плотность -независимого пикселов - абстрактный блок , который основан на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому на экране с разрешением 160 точек на дюйм один пиксель составляет один пиксель. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание: компилятор принимает оба «dip» и «dp», хотя «dp» более соответствует «sp».
sp
Scale- независимые пиксели - это как единица измерения dp, но также масштабируется в соответствии с предпочтениями размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были скорректированы как по плотности экрана, так и по предпочтениям пользователя.
Из понимания независимости плотности в Android :
+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size |
+----------------+----------------+---------------+-------------------------------+
| ldpi | 120 dpi | 0.5 x 0.5 in | 0.5 in * 120 dpi = 60x60 px |
+----------------+----------------+---------------+-------------------------------+
| mdpi | 160 dpi | 0.5 x 0.5 in | 0.5 in * 160 dpi = 80x80 px |
+----------------+----------------+---------------+-------------------------------+
| hdpi | 240 dpi | 0.5 x 0.5 in | 0.5 in * 240 dpi = 120x120 px |
+----------------+----------------+---------------+-------------------------------+
| xhdpi | 320 dpi | 0.5 x 0.5 in | 0.5 in * 320 dpi = 160x160 px |
+----------------+----------------+---------------+-------------------------------+
| xxhdpi | 480 dpi | 0.5 x 0.5 in | 0.5 in * 480 dpi = 240x240 px |
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi | 640 dpi | 0.5 x 0.5 in | 0.5 in * 640 dpi = 320x320 px |
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit | Description | Units Per | Density | Same Physical Size |
| | | Physical Inch | Independent | On Every Screen |
+---------+-------------+---------------+-------------+--------------------+
| px | Pixels | Varies | No | No |
+---------+-------------+---------------+-------------+--------------------+
| in | Inches | 1 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| mm | Millimeters | 25.4 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| pt | Points | 72 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| dp | Density | ~160 | Yes | No |
| | Independent | | | |
| | Pixels | | | |
+---------+-------------+---------------+-------------+--------------------+
| sp | Scale | ~160 | Yes | No |
| | Independent | | | |
| | Pixels | | | |
+---------+-------------+---------------+-------------+--------------------+
Дополнительную информацию также можно найти в документации по дизайну Google .
dp
вовсе не имеют точно такую же физическую длину. (Хотя это близко.) См. Комментарий @ Fraggle о ведении. Это означает, что 48dp будет примерно 8 мм (0,3 дюйма), но может варьироваться до 11 мм.
Практически все об этом и о том, как добиться наилучшей поддержки нескольких экранов разных размеров и плотности, очень хорошо документировано здесь:
Размер экрана
Фактический физический размер, измеряемый по диагонали экрана. Для простоты Android группирует все действительные размеры экрана в четыре обобщенных размера: маленький, нормальный, большой и очень большой.Плотность экрана
Количество пикселей в физической области экрана; обычно называется dpi (точек на дюйм). Например, экран «низкой» плотности имеет меньше пикселей в данной физической области по сравнению с экраном «нормальной» или «высокой» плотности. Для простоты Android группирует все фактические плотности экрана в шесть обобщенных плотностей: низкая, средняя, высокая, сверхвысокая, сверхвысокая и сверхвысокая сверхвысокая.Ориентация
Ориентация экрана с точки зрения пользователя. Это либо альбомная, либо книжная ориентация, что означает, что соотношение сторон экрана должно быть либо широким, либо высоким, соответственно. Имейте в виду, что разные устройства не только работают в разных ориентациях по умолчанию, но и могут меняться во время выполнения, когда пользователь поворачивает устройство.Разрешение
Общее количество физических пикселей на экране. При добавлении поддержки нескольких экранов приложения не работают напрямую с разрешением; приложения должны касаться только размера и плотности экрана, как это определено обобщенными группами размеров и плотности.Плотно-независимый пиксель (dp)
Виртуальный пиксельный блок, который следует использовать при определении макета пользовательского интерфейса, чтобы выразить размеры или положение макета независимым от плотности способом. Независимый от плотности пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовой плотностью, принятой системой для экрана «средней» плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование единиц измерения dp по мере необходимости на основе фактической плотности используемого экрана. Преобразование Dp единиц пикселов экрана проста:px = dp * (dpi / 160)
. Например, на экране с разрешением 240 dpi 1 dp равен 1,5 физических пикселей. Вы должны всегда использовать единицы измерения dp при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.
Если вы серьезно относитесь к разработке приложения для 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
изображение для xhdpipx - Pixels - точка на шкале соответствует фактическим пикселям на экране.
я - дюймы - в зависимости от физического размера экрана.
мм - миллиметры - в зависимости от физического размера экрана.
pt - Точки - 1/72 дюйма в зависимости от физического размера экрана.
dp - Плотность-независимые пиксели - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому один экран на экране с разрешением 160 точек на дюйм dp
составляет один пиксель. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание. Компилятор принимает dip
и то dp
, и dp
другое , хотя и более соответствует sp
.
sp - независимые от масштаба пиксели - это какdp
единицу, но также масштабируется в соответствии с предпочтением размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были отрегулированы как по плотности экрана, так и по предпочтениям пользователя.
Возьмем пример двух экранов одинакового размера, но один имеет плотность экрана 160 точек на дюйм (точек на дюйм, то есть пикселей на дюйм), а другой - 240 точек на дюйм.
Lower resolution screen Higher resolution, same size
Physical Width 1.5 inches 1.5 inches
Dots Per Inch (“dpi”) 160 240
Pixels (=width*dpi) 240 360
Density (factor of baseline 160) 1.0 1.5
Density-independent pixels 240 240
(“dip” or “dp” or “dps”)
Scale-independent pixels
(“sip” or “sp”) Depends on user font size settings same
Кроме того, вы должны иметь четкое представление о следующих понятиях:
Размер экрана:
Фактический физический размер, измеренный как диагональ экрана. Для простоты Android группирует все действительные размеры экрана в четыре обобщенных размера: маленький, нормальный, большой и очень большой.
Плотность экрана:
Количество пикселей в физической области экрана; обычно называется dpi (точек на дюйм). Например, экран «низкой» плотности имеет меньше пикселей в данной физической области по сравнению с экраном «нормальной» или «высокой» плотности. Для простоты Android группирует все фактические плотности экрана в четыре обобщенные плотности: низкая, средняя, высокая и сверхвысокая.
Ориентация:
Ориентация экрана с точки зрения пользователя. Это либо альбомная, либо книжная ориентация, что означает, что соотношение сторон экрана должно быть либо широким, либо высоким, соответственно. Имейте в виду, что разные устройства не только работают в разных ориентациях по умолчанию, но и могут меняться во время выполнения, когда пользователь поворачивает устройство.
Разрешение:
Общее количество физических пикселей на экране. При добавлении поддержки нескольких экранов приложения не работают напрямую с разрешением; приложения должны касаться только размера и плотности экрана, как это определено обобщенными группами размеров и плотности.
Плотно-независимый пиксель (dp):
Виртуальный пиксельный модуль, который следует использовать при определении макета пользовательского интерфейса, чтобы выражать размеры или положение макета независимым от плотности способом. Независимый от плотности пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовой плотностью, принятой системой для экрана «средней» плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование единиц измерения dp по мере необходимости на основе фактической плотности используемого экрана. Преобразование единиц dp в пиксели экрана очень просто: px = dp * (dpi / 160). Например, на экране с разрешением 240 dpi 1 dp равен 1,5 физических пикселей. Вы должны всегда использовать единицы измерения dp при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.
Ссылка: сайт разработчиков Android
dp
есть dip
. Используйте его для всего (поля, отступы и т. Д.).
Используйте только sp
для {text-size}.
Чувствуете разницу между px
, dp
и sp
на различных размеров экрана.
Источник: Android Программирование: Руководство ранчо Большого ботаника
px или точка - это пиксель на физическом экране.
dpi - это пиксели на дюйм на физическом экране, которые представляют собой плотность дисплея.
Android дает псевдонимы с несколькими значениями плотности
dip или dp являются независимыми от плотности пикселями , т.е. они соответствуют большему или меньшему количеству пикселей в зависимости от физической плотности.
sp или sip - это независимый от масштаба пиксель . Они масштабируются при включении опции « Большой текст» в Settings>Accessibility
Используйте sp для размера текста.
Используйте дп для всего остального.
Источник 3 : (данные из источника 3 приведены ниже)
Это значения измерений, определенные в XML. Размерность указывается числом, за которым следует единица измерения. Например: 10px, 2in, 5sp. Android поддерживает следующие единицы измерения:
дп
Плотно-независимые пиксели - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм (точек на дюйм), на котором 1dp приблизительно равен 1px. При работе на экране с более высокой плотностью число пикселей, используемых для рисования 1dp, увеличивается с коэффициентом, соответствующим dpi экрана. Аналогично, когда на экране с более низкой плотностью, количество пикселей, используемых для 1dp, уменьшается. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Использование dp-единиц (вместо px-единиц) - это простое решение для правильного изменения размеров видов в макете для разных плотностей экрана. Другими словами, он обеспечивает согласованность с реальными размерами ваших элементов пользовательского интерфейса на разных устройствах.
зр
Пиксели, не зависящие от масштаба - это похоже на единицу измерения dp, но также масштабируется в соответствии с предпочтениями размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были отрегулированы как по плотности экрана, так и по предпочтениям пользователя.
пт
Очки - 1/72 дюйма в зависимости от физического размера экрана.
ПВ
Пиксели - соответствует фактическим пикселям на экране. Эта единица измерения не рекомендуется, потому что фактическое представление может варьироваться в зависимости от устройства; Каждое устройство может иметь различное количество пикселей на дюйм и может иметь больше или меньше доступных пикселей на экране.
мм
Миллиметры - в зависимости от физического размера экрана.
в
Дюймы - в зависимости от физического размера экрана.
Примечание. Измерение - это простой ресурс, на который ссылается значение, указанное в атрибуте имени (а не в имени файла 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
Виртуальный пиксельный модуль, который следует использовать при определении макета пользовательского интерфейса, чтобы выражать размеры или положение макета независимым от плотности способом. Как описано выше, независимый от плотности пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовой плотностью, принятой системой для экрана «средней» плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование единиц измерения dp по мере необходимости на основе фактической плотности используемого экрана. Преобразование единиц измерения в пиксели экрана очень просто:
px = dp * (dpi / 160).
Например, на экране с разрешением 240 dpi 1 dp равен 1,5 физических пикселей. Вы должны всегда использовать единицы измерения dp при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.
Понимание пикселя в dp и наоборот очень важно (особенно для точного определения значений dp для творческой команды)
dp = px * 160 / dpi
MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.
HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp
For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
4.7" diagonal
Это объяснено выше. Старайтесь избегать в макете файлов. Но в некоторых случаях требуется 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 = плотность независимых пикселей
точек на дюйм = точек на дюйм
Мы должны избегать использования sp .
Мы должны использовать dp для поддержки нескольких экранов.
Android поддерживает разные разрешения экрана
Устройство с разрешением 120 dp ldpi имеет размер 120 пикселей в 1 дюйме.
То же самое для других плотностей ...
Мы, как разработчики программного обеспечения, должны использовать эту формулу преобразования:
пиксель = dp * (плотность / 160)
Таким образом, у 1 dp устройства с разрешением 240 точек на дюйм будет = 1 * (240/160) = 3/2 = 1,5 пикселя.
И 1 dp устройства с разрешением 480 точек на дюйм будет иметь = 1 * (480/160) = 3 пикселя.
Используя эти 1,5 и 3 пикселя знания, инженер-программист может проектировать макеты для разных плотностей.
Чтобы проверить параметры экрана любого устройства:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Toast.makeText(
this,
"4:" + metrics.heightPixels + "," + metrics.density + ","
+ metrics.densityDpi, Toast.LENGTH_LONG).show();
Различие между dp
и sp
единицами, указанными как « предпочтение размера шрифта пользователя » ответами, скопированными из официальной документации, можно увидеть во время выполнения, изменив Settings->Accessibility->Large Text
параметр.
Large Text
опция заставляет текст стать в 1.3
разы больше.
private static final float LARGE_FONT_SCALE = 1.3f;
Конечно, это может зависеть от поставщика, поскольку оно находится в пакетах / приложениях / настройках .
точек на дюйм -
px - пиксель
баллы - баллы
в дюймах - относительно физического размера экрана (1 дюйм = 2,54 см).
мм-миллиметр - относительно физического размера экрана.
sp - масштабно-независимый пиксель.
падение -
В стандарте используются 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_ *".
Взято отсюда .
Это поможет разобраться во многих путаницах при переводе между px и dp, если вы знаете разрешение экрана.
Итак, допустим, вы хотите изображение с разрешением 60 dp для экрана hdpi, тогда физический размер пикселя 60 dp:
px = 60 * (240 / 160)
Размер экрана в Android
сгруппирована по категориям small
, medium
, large
, extra large
, double-extra
и triple-extra
. Плотность экрана - это количество пикселей в пределах области (например, дюйма) экрана. Обычно измеряется в точках на дюйм (dpi). Плотность экрана сгруппирована как низкая, средняя, высокая и сверхвысокая. Разрешение - это общее количество пикселей на экране.
Формула для преобразования между единицами
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.
/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/
public class DPICalculator {
private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;
private float forDeviceDensity;
private float width;
private float height;
public DPICalculator(float forDeviceDensity, float width, float height){
this.forDeviceDensity = forDeviceDensity;
this.width = width;
this.height = height;
}
public static void main(String... args) {
DPICalculator dpiCalculator = new DPICalculator(240,330,120);
dpiCalculator.calculateDPI();
}
private float getPx(float dp, float value) {
float px = dp * (value / forDeviceDensity );
return px;
}
private void calculateDPI() {
float ldpiW = getPx(LDPI,width);
float ldpiH = getPx(LDPI,height);
float mdpiW = getPx(MDPI,width);
float mdpiH = getPx(MDPI,height);
float hdpiW = getPx(HDPI,width);
float hdpiH = getPx(HDPI,height);
float xdpiW = getPx(XHDPI,width);
float xdpiH = getPx(XHDPI,height);
float xxdpiW = getPx(XXHDPI,width);
float xxdpiH = getPx(XXHDPI,height);
float xxxdpiW = getPx(XXXHDPI,width);
float xxxdpiH = getPx(XXXHDPI,height);
System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);
}
}
Более подробную информацию смотрите по следующей ссылке.
http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/
Пожалуйста, прочитайте ответ от сообщества вики. Ниже упомянута некоторая информация, которая должна быть рассмотрена в дополнение к вышеупомянутым ответам. Большинство разработчиков 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
Я наткнулся на хорошую статью о разработке пользовательского интерфейса приложений Android для разных разрешений экрана, и я хотел бы оставить ее здесь только для тех, кто ищет в этой области. Да, я знаю, что это как-то описано в Google Docs (и упоминается в постах выше), я читал это, но это было нехорошо для меня (да, я могу быть слишком глупым)). Мне оставалось неясным, как создавать макеты, способные работать с экранами разного размера. Я ненавижу концепцию DP и так далее, когда мне нужно реализовать «гибкий» макет интерфейса для разных экранов. (Привет, разработчики iOS - да, вы правы, это концепция раскадровки).
У Android неплохая концепция пользовательского интерфейса, но, к сожалению, в нем нет функций iOS Storyboard. Разработка гибкого пользовательского интерфейса в Android - вещь не из легких (в лучшем случае).
Вот статья, которая помогла мне понять, что делать в Android, чтобы создавать макеты для экрана разных размеров:
Блог JMSTUDIO: - Определите размер экрана приложения для 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:
ДОБАВЛЕНО : Если вы также заинтересованы в «гибком» пользовательском интерфейсе, взгляните на эту библиотеку: 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> Руководство разработчика Android Dimension
> Экраны
Размер экрана в 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
единицы измерения. Adp
является независимым от плотности пикселем, который соответствует физическому размеру пикселя на 160dpi
. Ansp
- это та же базовая единица, но масштабируется в соответствии с предпочтительным размером текста пользователя (это независимый от масштаба пиксель), поэтому вам следует использовать эту единицу измерения при определении размера текста
Экран мобильного телефона состоит из тысяч крошечных точек, известных как пиксели (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
.