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




15 Answers

Из документации для разработчиков Android :

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

  2. в
    Дюймы - на основе физического размера экрана.
    1 дюйм = 2,54 сантиметра

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

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

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

  6. зр
    Масштабируемые независимые пиксели - это похоже на блок 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 .

Чтобы вычислить размеры на реальном устройстве, this приложение можно использовать.

xml screen

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

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



Я расскажу подробнее о том, как именно преобразование 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 . Вам нужно будет создавать изображения разных размеров для поддерживаемых размеров экрана:

  • 100 * 100 px для mdpi
  • 150 * 150 px для hdpi
  • 200 * 200 px для xhdpi



Кроме того, у вас должно быть четкое понимание следующих концепций:

Размер экрана:

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

Плотность экрана:

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

Ориентация:

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

Разрешение:

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

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

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

Ссылка: Сайт разработчиков Android




Я вычислил приведенную ниже формулу, чтобы сделать преобразование dpi в dp и sp




Источник 1

Источник 2

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

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

дп

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

зр

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

пт

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

ПВ

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

мм

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

в

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

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




ПВ

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

dp или dip

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

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

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

зр

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

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




Вы можете увидеть разницу между px и dp из приведенного ниже рисунка, и вы также можете обнаружить, что px и dp не могут гарантировать одинаковые физические размеры на разных экранах.




Я бы использовал только dp.

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

Кроме того, если вы используете приложение sp-font на планшете 160 точек на дюйм, вы обнаружите, что все масштабируется ... но ваш шрифт, который будет выглядеть крошечным в сравнении. Это не очень хорошо.

Хотя идея «sp» шрифтов имеет хорошее сердце, это плохая идея. Придерживайтесь dp для всего.




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

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

private static final float LARGE_FONT_SCALE = 1.3f;

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




  • px - один пиксель, то же, что и в CSS, JavaScript и т. д.
  • sp - независимые от масштаба пиксели пикселей
  • независимые от плотности пиксели пиксели

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




Размер экрана в Android сгруппирован по категориям: small , medium , large , extra large , double-extra и triple-extra . Плотность экрана - это количество пикселей в пределах области (например, дюйма) экрана. Обычно он измеряется в точках на дюйм (dpi). Плотность экрана сгруппирована как низкая, средняя, ​​высокая и сверхвысокая. Разрешение - общее количество пикселей на экране.

  • dp: Независимый от плотности пиксель, он зависит от плотности экрана. В 160 dpi экран, 1 dp = 1 пиксель. За исключением размера шрифта, всегда используйте dp.
  • dip: dip == dp. В предыдущих версиях Android dip использовался, а затем был изменен на dp.
  • sp: Scale Independent Pixel, масштабируется в зависимости от предпочтений размера шрифта пользователя. Шрифты должны использовать sp.
  • px: наш обычный стандартный пиксель, который сопоставляется с пикселем экрана.
  • в дюймах, относительно физического размера экрана.
  • мм: миллиметры по размеру физического экрана.
  • pt: 1/72 дюйма, относительно физического размера экрана.

Формула для преобразования между единицами

 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.

Калькулятор DPI в Java

/*
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 для разных разрешений экрана, и я хотел бы оставить его здесь только для тех, кто ищет в этой области. Да, я знаю, что это как-то описано в документах Google (и упоминается в сообщениях выше), я читал это, но это было плохо для меня (да, я могу быть слишком глупым)). Мне осталось неясным, как создавать макеты, способные обрабатывать различные размеры экрана. Я ненавижу концепцию DP и т. Д., Когда мне нужно реализовать «гибкий» макет интерфейса для разных экранов. (Привет, разработчики iOS - да, вы правы, это концепция раскадровки).

У Android неплохая концепция пользовательского интерфейса, но, к сожалению, не хватает функций раскадровки iOS. Разработка гибкого пользовательского интерфейса в Android - это не просто (в лучшем случае).

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

Блог JMSTUDIO: - Определите размер экрана приложения Android

Как создать интерфейс для Android-приложений для разных размеров экрана

Чтобы создать пользовательский интерфейс приложения для разных размеров экрана, наш первоначальный дизайн должен соответствовать минимально требуемому пространству для каждого размера экрана. Android определяет минимальный размер (в dp) для каждого обобщенного типа экрана. Ниже приведено руководство по размеру экрана Android. Когда мы получаем размер экрана в формате dp, нам недостаточно разрабатывать интерфейс приложения для Android. Для каждого размера экрана нам нужно подготовить графические и растровые изображения для каждой плотности. Вот ориентир на плотность экрана Android.

Для удобства расчета мы можем следить за коэффициентом масштабирования 3: 4: 6: 8 между четырьмя обобщенными плотностями. Если мы создадим изображение размером 36 × 36 пикселей для устройства ldpi, размер снимков остальных размеров будет 48 × 48 для mdpi, 72 × 72 для hdpi и 96 × 96 для xhdpi.

Как создать интерфейс для Android-приложений в Photoshop

У многих дизайнеров есть проблемы для разработки пользовательского интерфейса Android-приложения в Photoshop или других графических инструментах, основанных на пикселях, из-за независимого от плотности модуля, дп. Дизайнеры не знают, как сопоставить dp с пикселем. Google также не дает четкого руководства по дизайну интерфейса Android для них, хотя они дают базовую формулу для преобразования dp и пикселей.

Как определение Android, 1pd равно 1px под 160 dpi (mdpi). Поэтому мы хотим разработать Android-приложение для Android-устройства xlarge с плотностью mdpi, мы можем определить наш размер пользовательского интерфейса в пикселях как 960 пикселей в ширину и 720 пикселей в высоту; Следуйте тому же правилу сопоставления, мы можем получить следующее руководство по дизайну интерфейса Android App:

ADDED : Если вы заинтересованы в «гибком» интерфейсе, посмотрите на эту библиотеку: Android SDK, который предоставляет новый размер - sdp (масштабируемый dp). Этот размерный блок масштабируется с размером экрана (это также упоминается в ответе здесь, о SDPбиблиотеке)

ADDED2 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> Экраны




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

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

px: пиксель или элемент изображения - это единственная точка на экране




Прежде чем ответить на этот вопрос, позвольте мне сначала уменьшить количество единиц. Итак, вы идете: dp или dip являются одинаковыми и известны как независимые от плотности пиксели .

1. px - обозначает пиксели. Пиксели - это одна точка, точка на экране. Обычно в мобильной индустрии он измеряется в ppi (пикселей на дюйм). Разрешение экрана прямо пропорционально ppi, чем больше пикселей на дюйм, тем выше разрешение экрана.

Например, если вы рисуете изображение размером 200 px * 200 px , то его внешний вид должен отличаться для устройства с высоким разрешением по сравнению с устройством с низким разрешением. Причина в том, что изображение на 200 пикселей на телефоне с низким разрешением будет выглядеть больше, чем на устройстве с высоким разрешением.

Ниже изображения показывают разрешение одного и того же изображения на разных телефонах -

  • Телефон с высоким разрешением экрана

  • Телефон с низким разрешением экрана

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

  • Изображение, показывающее 80 пикселей (изображение слева) и 80 дп (правое изображение) . Оформить заказ.

Значение dp равно одному физическому пикселю на экране с плотностью 160 . Для вычисления dp:

dp = (ширина в пикселях * 160) / плотность экрана

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




Related