В чем разница между единицами измерения Android?
- ПВ
- падение
- дп
- зр
В чем разница между единицами измерения Android?
Из документации разработчика Android:
ПВ
Пиксели - соответствует фактическим пикселям на экране.
в
Дюймы - в зависимости от физического размера экрана.
1 дюйм = 2,54 см
мм
Миллиметры - в зависимости от физического размера экрана.
пт
Очки - 1/72 дюйма в зависимости от физического размера экрана.
дп или провал
Плотность -independent Pixels - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому на экране с разрешением 160 точек на дюйм один пиксель составляет один пиксель. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание: компилятор принимает и "dip", и "dp", хотя "dp" более соответствует "sp".
зр
Scale -independent Pixels - это похоже на единицу измерения 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.
Практически все об этом и о том, как добиться наилучшей поддержки нескольких экранов разных размеров и плотности, очень хорошо документировано здесь:
Размер экрана
Фактический физический размер, измеренный как диагональ экрана. Для простоты 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
для hdpi200 * 200 px
для xhdpipx пикселей - точка на шкалу соответствует фактическим пикселям на экране.
в дюймах - на основе физических размеров экрана.
мм Миллиметры - на основе физического размера экрана.
pt Points - 1/72 дюйма в зависимости от физического размера экрана.
dp Плотность - независимые пиксели - абстрактный блок, основанный на физической плотности экрана. Эти единицы по отношению к 160 точек на дюйм экрана, так что один dp
один пиксель на 160 точек на дюйм экрана. Отношение dp-to-pixel будет меняться с плотностью экрана, но не обязательно в прямой пропорции. Примечание. Компилятор принимает как dip
и dp
, хотя dp
более согласуется с sp
.
sp -Scale-independent Pixels - это похоже на блок dp
, но он также масштабируется по предпочтению размера шрифта пользователя. Рекомендуется использовать этот аппарат при задании размеров шрифта, поэтому они будут настроены как на плотность экрана, так и на пользовательские предпочтения.
Возьмем пример двух экранов с одинаковым размером, но плотность экрана составляет 160 точек на дюйм (точек на дюйм, то есть пикселей на дюйм), а другая - 240 точек на дюйм.
Lower resolution screen Higher resolution, same size
Physical Width 1.5 inches 1.5 inches
Dots Per Inch ("dpi") 160 240
Pixels (=width*dpi) 240 360
Density (factor of baseline 160) 1.0 1.5
Density-independent Pixels 240 240
("dip" or "dp" or "dps")
Scale-independent pixels
("sip" or "sp") Depends on user font size settings same
Кроме того, вы должны иметь четкое представление о следующих понятиях:
Размер экрана:
Фактический физический размер, измеренный как диагональ экрана. Для простоты 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-программирование: руководство Big Nerd Ranch
Я вычислил приведенную ниже формулу, чтобы сделать преобразования dpi
равными dp
и sp
px или точка - это пиксель на физическом экране.
dpi - это пиксели на дюйм на физическом экране и представляют плотность отображения.
Android дает псевдонимы для нескольких плотностей
dip или dp являются пикселями с недостаточной плотностью, то есть они соответствуют более или менее пикселам в зависимости от физической плотности.
sp или sip не зависит от масштаба. Они масштабируются, когда опция "Большой текст" включена в Settings > Accessibility
Используйте sp для размера текста.
Используйте dp для всего остального.
Источник 3: (данные из источника 3 приведены ниже)
Это значения измерений, определенные в XML. Размерность указывается числом, за которым следует единица измерения. Например: 10px, 2in, 5sp. Следующие единицы измерения поддерживаются Android:
дп
Плотно-независимые пиксели - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм (точек на дюйм), на котором 1dp приблизительно равен 1px. При работе на экране с более высокой плотностью число пикселей, используемых для рисования 1 dp, увеличивается с коэффициентом, соответствующим для разрешения экрана. Аналогично, когда на экране с более низкой плотностью, количество пикселей, используемых для 1dp, уменьшается. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Использование dp-единиц (вместо px-единиц) - это простое решение для правильного изменения размеров видов в макете для разных плотностей экрана. Другими словами, он обеспечивает согласованность реальных размеров ваших элементов пользовательского интерфейса на разных устройствах.
зр
Пиксели, не зависящие от масштаба - это похоже на единицу измерения dp, но также масштабируется в соответствии с предпочтениями размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были отрегулированы как по плотности экрана, так и по предпочтениям пользователя.
пт
Очки - 1/72 дюйма в зависимости от физического размера экрана.
ПВ
Пиксели - соответствует фактическим пикселям на экране. Эта единица измерения не рекомендуется, потому что фактическое представление может варьироваться в зависимости от устройства; Каждое устройство может иметь различное количество пикселей на дюйм и может иметь больше или меньше доступных пикселей на экране.
мм
Миллиметры - в зависимости от физического размера экрана.
в
Дюймы - в зависимости от физического размера экрана.
Примечание. Измерение - это простой ресурс, на который ссылается значение, указанное в атрибуте имени (а не в имени файла XML). Таким образом, вы можете комбинировать ресурсы измерений с другими простыми ресурсами в одном XML файле под одним элементом.
В основном единственный раз, когда px применяется, равен одному пикселю, и если вы хотите, чтобы на экране был ровно один пиксель, как в случае делителя:
На> 160 dpi вы можете получить 2-3 пикселя,
На> 120 точек на дюйм округляется до 0.
точек
Пиксели - соответствуют фактическим пикселям на экране.
dp или dip
Не зависящие от плотности пиксели - абстрактный блок, основанный на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому один dp - один пиксель на экране с разрешением 160 точек на дюйм.
Использование dp:
Независимость от плотности - Ваше приложение достигает "независимости плотности", когда оно сохраняет физический размер (с точки зрения пользователей) элементов пользовательского интерфейса при отображении на экранах с различной плотностью. (т.е.) Изображение должно выглядеть одинаковым (не увеличенным или сжатым) на разных типах экранах.
зр
Масштабируемые пиксели - это похоже на блок dp, но он также масштабируется по предпочтению размера шрифта пользователя.
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
Виртуальный пиксельный блок, который следует использовать при определении компоновки пользовательского интерфейса, чтобы выразить размеры или положение макета независимо от плотности. Как описано выше, пиксель, не зависящий от плотности, эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который представляет собой базовую плотность, принимаемую системой для экрана средней плотности. Во время работы система прозрачно обрабатывает любое масштабирование блоков dp по мере необходимости, исходя из фактической плотности используемого экрана. Преобразование блоков dp в пиксели экрана простой:
px = dp * (dpi/160).
Например, на экране с разрешением 240 точек на дюйм 1 дп равен 1,5 физическим пикселям. Вы должны всегда использовать модули dp при определении пользовательского интерфейса приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.
Понимание пикселя для dp и наоборот очень важно (особенно для предоставления точных значений dp для творческой команды)
dp = px * 160 / dpi
MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.
HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp
For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
4.7" diagonal
Это объяснено выше. Старайтесь избегать в файлах макетов. Но есть некоторые случаи, когда требуется рх. например, разделитель ListView. px лучше здесь для предоставления однопиксельной линии в качестве разделителя для всех разрешений по экрану.
Используйте sp для размера шрифта. Тогда только шрифт внутри приложения будет меняться при изменении размера шрифта устройства (то есть Display → Fonts on Device). Если вы хотите сохранить шрифт статического размера внутри приложения, вы можете указать размер шрифта в dp. В таком случае он никогда не изменится. Разработчики могут получить такое требование для некоторых конкретных экранов, для этого разработчики могут использовать dp вместо sp. Во всех остальных случаях рекомендуется использовать sp.
Вы можете увидеть разницу между px
и dp
на приведенном ниже рисунке, и вы также можете обнаружить, что px
и dp
не могут гарантировать одинаковые физические размеры на разных экранах.
Все, что связано с размером текста и внешнего вида, должно использовать sp
или pt
. Принимая во внимание, что все, что связано с размером элементов управления, макетов и т.д., Должно использоваться с dp
.
Вы можете использовать как dp
, так и dip
в своих местах.
Я бы использовал только dp.
Существует много разговоров об использовании "sp" для размеров шрифтов, и, хотя я ценю этот момент, я не думаю, что это правильная вещь с точки зрения дизайна. Вы можете в конечном итоге нарушить свой дизайн, если у пользователя есть выбор вонзающего размера шрифта, и пользователь в конечном итоге будет обвинять приложение, а не собственный выбор жизни.
Кроме того, если вы возьмете приложение sp-font на планшете 160 dpi, вы обнаружите, что все масштабируется... но ваш шрифт, который будет выглядеть крошечным в сравнении. Это нехороший взгляд.
Хотя идея "sp" шрифтов имеет хорошее сердце, это плохая идея. Придерживайтесь dp для всего.
sp = масштабный независимый пиксель
dp = dip = независимые от плотности пиксели
dpi = точек на дюйм
Мы не должны использовать sp.
Мы должны использовать dp для поддержки нескольких экранов.
Android поддерживает различные разрешения экрана
Устройство 120dp ldpi имеет 120 пикселей в размере 1 дюйм.
То же самое для других плотностей...
Мы, как разработчики программного обеспечения, должны использовать эту формулу преобразования:
pixel = dp * (плотность/160)
Таким образом, устройство с разрешением 240 dpi 1 dp будет иметь = 1 * (240/160) = 3/2 = 1,5 пикселя.
И 480 dpi устройство 1 dp будет иметь = 1 * (480/160) = 3 пикселя.
Используя знания 1,5 и 3 пиксела, инженер-программист может проектировать макеты для разных плотностей.
Чтобы проверить параметры экрана любого устройства:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Toast.makeText(
this,
"4:" + metrics.heightPixels + "," + metrics.density + ","
+ metrics.densityDpi, Toast.LENGTH_LONG).show();
Разница между dp
и sp
единицами, указанными как "предпочтение размера пользовательских шрифтов" ответами, скопированными из официальной документации, можно увидеть во время выполнения, изменив опцию Settings->Accessibility->Large Text
.
Large Text
параметр заставляет текст становиться 1.3
раз больше.
private static final float LARGE_FONT_SCALE = 1.3f;
Это может быть, конечно, зависимым от поставщика, поскольку оно находится в packages/apps/Settings.
dpi -
px - pixel
pt - точки
дюйм - в отношении физического размера экрана (1 дюйм = 2,54 см).
мм-миллиметр - в отношении физического размера экрана.
sp - масштабный независимый пиксель.
dip -
В стандарте используются 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, если вы знаете свой экранный dpi.
Итак, скажем, вы хотите изображение 60 dp для экрана hdpi, тогда размер физического пикселя 60 дп:
px = 60 * (240 / 160)
Размер экрана в Android
сгруппирован по категориям: small
, medium
, large
, extra large
, double-extra
и triple-extra
. Плотность экрана - это количество пикселей в пределах области (например, дюйма) экрана. Обычно он измеряется в точках на дюйм (dpi). Плотность экрана сгруппирована как низкая, средняя, высокая и сверхвысокая. Разрешение - общее количество пикселей на экране.
Формула для преобразования между единицами
px = dp * (dpi / 160)
dp to px в устройстве
Следующий пример может помочь лучше понять. Масштабирование происходит на основе размера ковша 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) и 640 (xxxhdpi). Предлагаемый коэффициент Google для проектирования составляет 3: 4: 6: 8: 12 для ldpi: mdpi: hdpi: xhdpi: xxhdpi
Изображение размером 150 пикселей x 150 пикселей будет занимать,
- 150 dp X 150 dp пространство экрана в mdpi
- 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/
Обычно для размеров шрифта используется sp, а dip используется (также называемый dp) для других.
Пожалуйста, прочитайте ответ от сообщества вики. Ниже упомянута некоторая информация, которую следует учитывать в дополнение к приведенным выше ответам.
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 (mdpi). Поэтому мы хотим разработать приложение для 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, будет увеличиваться по мере увеличения разрешения экрана (когда у вас больше точек/пикселей на дюйм). И наоборот, на устройствах с более низким разрешением количество пикселей, представленных на единице измерения, уменьшится. Так как это относительная единица, она должна иметь базовый уровень для сравнения. Эта базовая линия - это экран с разрешением 160 точек на дюйм. Это уравнение: px = dp * (dpi/160).
2) sp: (scale independent pixels)
Этот блок масштабируется в соответствии с разрешением экрана (например, dp), а также предпочтением размера шрифта пользователя.
3) px: (pixels)
Фактические пиксели или точки на экране.
Более подробную информацию вы можете посетить
Руководство разработчика Android> Размер
Руководство разработчика Android> Экраны
Размер экрана в 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
.sp
является одним и тем же базовым блоком, но масштабируется пользовательский размер шрифта (его независимый от масштаба пиксель), поэтому вы должен использовать этот блок измерения при определении размера текста
Экран мобильного телефона состоит из тысяч крошечных точек, называемых пикселями (px). Пиксель - это самый маленький элемент, который позволяет сделать изображение. Чем больше пикселей для создания изображения или формулировки, тем он становится более резким, а экран смартфона становится более легко читаемым.
Разрешение экрана измеряется с точки зрения количества пикселей на экране. Разрешение экрана является часто используемой спецификацией при покупке устройства, но на самом деле это не так полезно при проектировании для Android, потому что мышление экранов с точки зрения пикселей игнорирует понятие физического размера, которое для сенсорного устройства действительно действительно важно.
Независимый от плотности пиксель (dp или dip) позволяет разработчику создавать активы, которые появляются ожидаемым образом, независимо от разрешения или плотности целевого устройства.
Независимый от плотности пиксель (dp или dip) равен одному пикселю при базовой плотности или 160 dpi (точек на дюйм).
1 px/1dp = 160 dpi/160 dpi
2 px/1dp = 320 dpi (2x)/160 dpi
где,
dpi - точки на дюйм
Таким образом, при 320 dpi, 1 dp равно 2 px.
формула
px/dp = dpi/160dpi
Точки на дюйм (dpi) - это показатель резкости (т.е. Плотность освещенных точек) на экране дисплея. Точки на дюйм для заданного разрешения изображения будут отличаться в зависимости от общего размера экрана, так как одинаковое количество пикселей распределяется по другому пространству.
Работа с независимыми от плотности пикселями помогает нам справляться с ситуацией, например, когда у вас есть два устройства с одинаковым разрешением пикселей, но с разным пространством. Предположим, что в случае планшет и телефон имеют одинаковое разрешение пикселей 1280 на 800 пикселей (160 точек на дюйм) и 800 на 1280 пикселей (320 точек на дюйм) соответственно.
Теперь, поскольку планшет имеет базовую плотность (160 dpi), его физические и плотности независимых размеров пикселей одинаковы, 1280 на 800. С другой стороны, телефон имеет более высокую плотность пикселей, поэтому он имеет вдвое меньше независимых от плотности пикселей, чем физические пиксели. Таким образом, телефон имеет 400 на 640 независимых пикселей. Таким образом, использование не зависящего от плотности пикселя облегчает мысленное изображение, что планшет имеет гораздо больше пространства, чем телефон.
Аналогично, если у вас есть два устройства с аналогичным размером экрана, но с разной плотностью пикселей, скажем, 800 на 1280 пикселей (320 точек на дюйм), а на другой - на 400 на 640 пикселей (160 точек на дюйм), нам не нужно полностью определять разные макеты для этих двух устройств, так как мы можем измерять активы с точки зрения плотности пикселей, которые одинаковы для обоих устройств.
800 на 1280 пикселей (320 точек на дюйм) = 400 на 640 пикселей с независимой от плотности (dp)
400 на 640 пикселей (160 точек на дюйм) = 400 на 640 пикселей с независимой от плотности (dp)
Масштабирование независимых пикселей (sp) является предпочтительной единицей для размера шрифта. В целях доступности Android позволяет пользователям настраивать размер шрифта своего устройства. Пользователи, у которых есть проблемы с чтением текста, могут увеличить размер шрифта своего устройства. Обычно этот параметр можно найти в настройках дисплея на вашем телефоне или планшете под размером шрифта. Он часто также доступен через настройки доступности.
С независимыми от масштаба пикселями 16 sp точно такие же, как 16 dp, когда размер шрифта устройства нормальный или 100%. Но когда размер шрифта устройства большой, например 125%, 16 sp будут переведены на 20 дп или 1,25 раза 16.
Если вы используете dp в качестве единицы размера шрифта, то этот фрагмент текста имеет определенный физический размер независимо от того, настроен ли пользователь на размер шрифта устройства. Использование sp единиц сделает лучший опыт для людей с нарушенным зрением.
Ссылка: Udacity, Google
sp: масштабный независимый пиксель
Вы должны использовать его с текстом, потому что он автоматически масштабируется в соответствии с размером шрифта, который используется пользователем на его устройстве.
px: элемент pixel или picture - это единственная точка на экране
Прежде чем ответить на этот вопрос, позвольте мне сначала уменьшить количество единиц. Итак, вы здесь: dp или dip - оба одинаковы и известны как пиксели, не зависящие от плотности.
1. px - обозначает пиксели. Пиксели - это одна точка, точка на экране. Обычно в мобильной индустрии он измеряется в ppi (пикселей на дюйм). Разрешение экрана прямо пропорционально ppi, чем больше пикселей на дюйм, тем выше разрешение экрана.
Например, если вы рисуете изображение размером 200 px * 200 px, то его внешний вид должен отличаться на устройстве с высоким разрешением и на устройстве с низким разрешением. Причина в том, что изображение на 200 пикселей на телефоне с низким разрешением будет выглядеть больше, чем на устройстве с высоким разрешением.
Ниже изображения показывают разрешение одного и того же изображения на разных телефонах -
2. dip или dp - абстрактный блок, основанный на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому один пиксель составляет один пиксель на экране с разрешением 160 точек на дюйм. Отношение dp-to-pixel будет меняться с плотностью экрана, но не обязательно в прямой пропорции. "Независимость плотности" относится к равномерному отображению элементов пользовательского интерфейса на экранах с различной плотностью.
A dp равен одному физическому пикселю на экране с плотностью 160. Для вычисления dp:
dp = (ширина в пикселях * 160)/плотность экрана
3. sp - означает масштабируемые пиксели. Обычно sp используется для текстов в пользовательском интерфейсе, а sp сохраняет настройки шрифта. Например, если пользователь выбрал более крупный шрифт, чем 30 sp, он будет автоматически масштабироваться, чтобы выглядеть большим в соответствии с предпочтениями пользователя.
Я хочу дать простой способ понять dp
. На самом деле, я думаю, dp
является самым простым для понимания. dp
- это всего лишь единица физической длины. Он имеет тот же размер, что и mm
или inch
. Нам просто удобно писать 50dp
, 60dp
, а не 50/160 inch
или 60/160 inch
, потому что один dp
- это просто 1/160 inch
независимо от размера или разрешения экрана.
Единственная проблема заключается в том, что андроид-тэд некоторых экранов не является точным. Например, экран, классифицированный как 160dpi, может иметь действительно 170dpi. Таким образом, результат вычисления dp
нечеткий. Он должен быть примерно таким же, как 1/160 inch
.
SDP - блок масштабируемого размера - в основном это не блок, а размерные ресурсы для разных размеров экрана.
Попробуйте библиотеку sdp из Intuit. Это очень удобно для решения проблем с блоком, и вы можете быстро поддерживать несколько экранов.
Использование
android:paddingBottom="@dimen/_15sdp"
для положительного и android:layout_marginTop="@dimen/_minus10sdp"
для отрицательного sdp sdp
Он имеет эквивалентное значение в dp для каждого размера в папках values-sw<N>dp
(sw = smallestWidth).
Внимание
Используйте его осторожно! В большинстве случаев вам все равно нужно разработать другой макет для планшетов.
Пример
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_minus10sdp"
android:paddingBottom="@dimen/_15sdp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="♡"
android:textColor="#ED6C27"
android:textSize="@dimen/_70sdp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="U"
android:textColor="@android:color/black"
android:textSize="@dimen/_70sdp" />
</LinearLayout>
Вы можете использовать db для размера текста, но я предпочитаю ssp для размера текста.
Подробнее см. страницу GitHub библиотеки.