Единицы измерения. Чем отличается dp (dip) от px. Screen Density.

Обсуждение материалов из раздела Памятка
Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Единицы измерения. Чем отличается dp (dip) от px. Screen Density.

Сообщение damager82 » 14 авг 2011, 15:41

Для указания ширины, высоты и отступов View-элементов используются различные единицы измерения (ЕИ):

dp или dip - Density-independent Pixels. Абстрактная ЕИ, позволяющая приложениям выглядеть одинаково на различных экранах и разрешениях.

sp - Scale-independent Pixels. То же, что и dp, только используется для размеров шрифта в View элементах

pt - 1/72 дюйма, определяется по физическому размеру экрана. Эта ЕИ из типографии.

px – пиксел, не рекомендуется использовать т.к. на разных экранах приложение будет выглядеть по-разному.

mm – миллиметр, определяется по физическому размеру экрана

in – дюйм, определяется по физическому размеру экрана

Давайте разбираться, чем они отличаются друг от друга.

Click here to read this article!
Последний раз редактировалось damager82 14 авг 2011, 19:41, всего редактировалось 13 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Xroft
Сообщения: 38
Зарегистрирован: 10 май 2012, 10:11

Re: Единицы измерения. Чем отличается dp (dip) от px. Screen

Сообщение Xroft » 11 июн 2012, 01:09

Почему нигде нет примеров с %
неужто их просто нет? Оо

alexshr
Сообщения: 6
Зарегистрирован: 24 окт 2012, 18:10

не понимаю .....

Сообщение alexshr » 24 окт 2012, 22:34

Вопросы:

HTC Flyer: 7 inch, 1280x800 px, 170 dpi - не вяжутся х-ки экрана

Казалось бы, зная разрешение экрана в пикселях по вертикали (w_p) и горизонтали(h_p), а также зная длину диагонали монитора в дюймах (d), dpi экрана можно легко рассчитать, вычислив размер диагонали экрана в пикселях (по теореме Пифагора) и поделив это на размер диагонали в дюймах:

dpi = sqrt(w_p^2 + h_p^2)/d

Именно так предлагают вести расчет и в википедии, например.
http://ru.wikipedia.org/wiki/Ppi
Правда, применительно к screen density монитора чаще говорят о ppi (пикселей на дюйм) и реже о dpi (точек на дюйм). Но разницы, похоже, нет никакой.

Проведем расчет для HTC Flyer:
dpi = sqrt{1280^2 + 800^2}/7=215 , что сильно отличается от заявленных 170

В чем тут дело??
Кстати, остальные 2 устройства теореме Пифагора не противоречат, и dpi вычисленное соответствует заявленному.


2) Автор статьи для своих примеров включает режим Screen Density:
"Я включу режим ldpi для Wildfire и xhdpi для Flyer. Desire оставляю в mdpi"

Однако вот что сказано в документации:
http://developer.android.com/guide/prac ... letLayouts

low-density (ldpi) screens (~120dpi)
medium-density (mdpi) screens (~160dpi)
high-density (hdpi) screens (~240dpi)
high-density (xhdpi) screens (~320dpi)

Получается для наших устройств:
HTC Wildfire S: 180 dpi - mdpi
HTC Desire: 252 dpi - hdpi
HTC Flyer: 170 dpi - mdpi

Это категорически отличается от режимов, выставленных автором урока.
В чем тут дело?

3) Я не понял главного - смысл использования единицы dp. Ведь dp - это размер пикселя на экране с заданной заранее плотностью (160 dpi). В документации сказано: "The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen"

Т.е. получается что dp = 1/160 дюйма?? Выходит, dp - это просто единица измерения абсолютной длины?
Но тогда почему не измерять ее в мм или дюймах? Для чего конкретно нужен именно dp ?

alexshr
Сообщения: 6
Зарегистрирован: 24 окт 2012, 18:10

вариант определения

Сообщение alexshr » 26 окт 2012, 00:28

damager82 писал(а): dp или dip - Density-independent Pixels. Абстрактная ЕИ, позволяющая приложениям выглядеть одинаково на различных экранах и разрешениях.
Нет никакой возможности приложениям выглядеть одинаково на различных экранах и разрешениях. Во всяком случае, непонятно, что имелось в виду.
damager82 писал(а): Конечно Density не дает масштабирования абсолютно пропорциального разнице в разрешениях экрана...
dp нужен не для маштабирования изображения, а, наоборот,для того, чтобы маштабирования не было.
Видимо смысл в том, чтобы изображения, запрограммированные в пикселях (только вместо pх используем dp) , имели одинаковые (насколько это возможно) абсолютные размеры на различных экранах.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: не понимаю .....

Сообщение damager82 » 30 окт 2012, 11:22

alexshr писал(а):HTC Flyer: 7 inch, 1280x800 px, 170 dpi - не вяжутся х-ки экрана
Хорошо, что вы заметили ошибку. Я откуда-то взял неверное разрешение для Flyer. В реале оно 1024-600. Исправил на другой девайс.

По поводу полезности dp приведу пример.

Есть два девайса с экраном шириной (не диагональю) = 2 дюйма.
У первого (I) разрешение в ширину 320 px, а второго (II) 480 px.
Можем посчитать их dpi: для I = 320/2 = 160 dpi, для II = 480/2 = 240 dpi.
alexshr писал(а):low-density (ldpi) screens (~120dpi)
medium-density (mdpi) screens (~160dpi)
high-density (hdpi) screens (~240dpi)
high-density (xhdpi) screens (~320dpi)
Смотрим в табличку соотношений и ставим следующие режимы: I = mdpi, II = hdpi

Используем px
Нарисуем на обоих экранах объект шириной в 160 px.
На I он займет половину (320/160) ширины экрана, на II - треть (480/160).
Получилось, что два устройства с одной физической шириной экрана (2 дюйма) отображают один и тот же объект по-разному.

Используем dp
Нарисуем на обоих экранах объект шириной в 160 dp.
Система расчехляет коэфициенты режимов. Для I коэф = 1, т.к. mdpi. Для II коэф = 1.5, т.к. hdpi.
Соответственно этот коэф. применяется к нарисованому объекту. И его ширина в 160 dp превращается в 160 dp * 1 = 160 px для I, и в 160 dp * 1.5 = 240 px для II.
На I объект займет половину ширины экрана, на II - тоже половину.
Теперь получилось, что два устройства с одной физической шириной экрана (2 дюйма) отображают один и тот же объект одинаково.
Т.е. на втором устройстве его 240 dpi превратились в 160 dpi.
alexshr писал(а):Получается для наших устройств:
HTC Wildfire S: 180 dpi - mdpi
HTC Desire: 252 dpi - hdpi
HTC Flyer: 170 dpi - mdpi

Это категорически отличается от режимов, выставленных автором урока.
В чем тут дело?
Когда я ставил режимы для девайсов, я не привязывался к этой схеме. Я подгонял картинку, чтобы она выглядела более-менее одинаково на разных диагоналях. Но похоже, что я ошибался и цель всей этой штуки не в этом. А в том, чтобы установить одинаковое количество точек на дюйм. Т.е. сделать так, чтобы картинка выглядела одинаково не на всех экранах, а на экранах с одинаковой диагональю.

Буду думать, как подкорректировать материал в этом более верном направлении. Еще раз спасибо, что подняли эту тему.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

itvdonsk
Сообщения: 4
Зарегистрирован: 10 фев 2015, 07:11

Re: не понимаю .....

Сообщение itvdonsk » 08 мар 2015, 16:23

alexshr писал(а):Вопросы:
3) Я не понял главного - смысл использования единицы dp. Ведь dp - это размер пикселя на экране с заданной заранее плотностью (160 dpi). В документации сказано: "The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen"

Т.е. получается что dp = 1/160 дюйма?? Выходит, dp - это просто единица измерения абсолютной длины?
Но тогда почему не измерять ее в мм или дюймах? Для чего конкретно нужен именно dp ?
The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels.

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: не понимаю .....

Сообщение doter.ua » 08 мар 2015, 16:39

itvdonsk писал(а):
alexshr писал(а):Вопросы:
3) Я не понял главного - смысл использования единицы dp. Ведь dp - это размер пикселя на экране с заданной заранее плотностью (160 dpi). В документации сказано: "The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen"

Т.е. получается что dp = 1/160 дюйма?? Выходит, dp - это просто единица измерения абсолютной длины?
Но тогда почему не измерять ее в мм или дюймах? Для чего конкретно нужен именно dp ?
The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels.
Ну в США например дюймы и футы, в Европе мм и см. Сам по себе дюйм очень большой по отношению к экрану смартфона и не удобный, а наша метрическая система вполне норм, но это же гамбургеры, им не привычно в мм считать. Да и само название как бы напоминает о проблеме плотности экранов, так бы вряд ли кто-то задумывался почему мм используются и часто прибегали бы к тем же пикселям. А так смотришь - какой-то ДП, гуглишь и заодно узнаешь зачем их ввели, уже лишний раз подумаешь перед тем ,как использовать абсолютные величины.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: вариант определения

Сообщение altwin » 08 мар 2015, 18:08

alexshr писал(а):
damager82 писал(а): dp или dip - Density-independent Pixels. Абстрактная ЕИ, позволяющая приложениям выглядеть одинаково на различных экранах и разрешениях.
Нет никакой возможности приложениям выглядеть одинаково на различных экранах и разрешениях. Во всяком случае, непонятно, что имелось в виду.
damager82 писал(а): Конечно Density не дает масштабирования абсолютно пропорциального разнице в разрешениях экрана...
dp нужен не для маштабирования изображения, а, наоборот,для того, чтобы маштабирования не было.
Видимо смысл в том, чтобы изображения, запрограммированные в пикселях (только вместо pх используем dp) , имели одинаковые (насколько это возможно) абсолютные размеры на различных экранах.
Пиксель - наименьший логический элемент двумерного цифрового изображения в растровой графике, или [физический] элемент матрицы дисплеев, формирующих изображение. т.е. разница в типах VGA \ IPS и т.д. DP - Dots per inch, измерятся конкретно колличеством точек на квадратный дюйм. Что знесь не понятного? это принципиально и концептуально разные вещи не имееющие вообще ничего обещго.



P.s. какая вам разница то? вы учитесь? - читайте что говорят и запоминайте, так надо... Если вам интересно почему DP - это dp а не "конь в пальто", задайте этот вопрос разработчикам Android. Вы сейчас стремитесь стать пользователем Android SDK, подобные вопросы для вас - потеря времени.
Изображение

Ups
Сообщения: 1
Зарегистрирован: 12 дек 2015, 09:56

Re: Единицы измерения. Чем отличается dp (dip) от px. Screen

Сообщение Ups » 12 дек 2015, 10:01

Наверное писать нужно не сюда , но более подходящего места не нашел . При переходе по http://startandroid.ru/ru/materialy/pamjatka выскакивает 404 ошибка . Эта ссылка была указана как Памятка в карте сайта.

GRAF_COLLIOSTRO
Сообщения: 115
Зарегистрирован: 08 янв 2015, 14:32

Re: Единицы измерения. Чем отличается dp (dip) от px. Screen

Сообщение GRAF_COLLIOSTRO » 13 дек 2015, 05:18

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

планшет и телефон - две противоположности. Как собрать простой макет что то типа такого:

есть один экран для планшета. на нём меню сверху. меню слева. большое поле с картой гугл.
и этот же вариант для телефона - карта в отдельном окне... меню по вызову... второе меню тож както не знаю))) слайд между менюшкой и картой.

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

я уже начинаю думать, что у меня пространственный кретинизм) я победил многопоточность, я победил блютус, я написал кусок нативного кода и оно работает!... но простая вёрстка меня убивает) просто каждый раз головоломка с нуля)))

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

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

Зы. сейчас на меня опять наедут, что я ТРЕБУЮ) Я не требую. я пишу об актуальной, как мне кажется, теме (проблеме, если угодно). Из моих знакомых андройдовцев все нервно дрыгаются при мысли о дизайне... почему бы не заострить на этом внимание.

Ответить