Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 19 окт 2017, 21:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: 14 авг 2011, 15:41 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1348
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Для указания ширины, высоты и отступов View-элементов используются различные единицы измерения (ЕИ):

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

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

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

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

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

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

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

Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 14 авг 2011, 19:41, всего редактировалось 13 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 июн 2012, 01:09 
Аватар пользователя

Зарегистрирован: 10 май 2012, 10:11
Сообщений: 38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Почему нигде нет примеров с %
неужто их просто нет? Оо


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: не понимаю .....
СообщениеДобавлено: 24 окт 2012, 22:34 

Зарегистрирован: 24 окт 2012, 18:10
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вопросы:

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 ?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: вариант определения
СообщениеДобавлено: 26 окт 2012, 00:28 

Зарегистрирован: 24 окт 2012, 18:10
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
damager82 писал(а):
dp или dip - Density-independent Pixels. Абстрактная ЕИ, позволяющая приложениям выглядеть одинаково на различных экранах и разрешениях.

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

damager82 писал(а):
Конечно Density не дает масштабирования абсолютно пропорциального разнице в разрешениях экрана...

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: не понимаю .....
СообщениеДобавлено: 30 окт 2012, 11:22 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1348
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
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
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: не понимаю .....
СообщениеДобавлено: 08 мар 2015, 16:23 

Зарегистрирован: 10 фев 2015, 07:11
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
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.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: не понимаю .....
СообщениеДобавлено: 08 мар 2015, 16:39 
Аватар пользователя

Зарегистрирован: 23 ноя 2013, 16:08
Сообщений: 1106
Откуда: Ukraine
Благодарил (а): 30 раз.
Поблагодарили: 175 раз.
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.


Ну в США например дюймы и футы, в Европе мм и см. Сам по себе дюйм очень большой по отношению к экрану смартфона и не удобный, а наша метрическая система вполне норм, но это же гамбургеры, им не привычно в мм считать. Да и само название как бы напоминает о проблеме плотности экранов, так бы вряд ли кто-то задумывался почему мм используются и часто прибегали бы к тем же пикселям. А так смотришь - какой-то ДП, гуглишь и заодно узнаешь зачем их ввели, уже лишний раз подумаешь перед тем ,как использовать абсолютные величины.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: вариант определения
СообщениеДобавлено: 08 мар 2015, 18:08 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
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, подобные вопросы для вас - потеря времени.

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 дек 2015, 10:01 

Зарегистрирован: 12 дек 2015, 09:56
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Наверное писать нужно не сюда , но более подходящего места не нашел . При переходе по http://startandroid.ru/ru/materialy/pamjatka выскакивает 404 ошибка . Эта ссылка была указана как Памятка в карте сайта.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 дек 2015, 05:18 

Зарегистрирован: 08 янв 2015, 14:32
Сообщений: 115
Благодарил (а): 6 раз.
Поблагодарили: 5 раз.
Ребят, сделайте пожалуйста отделбную тему с подробным уроком по вёрстке страниц под разные устройства. Пусть там не будет никакого кода за картинками.
Я больше года уже пытаюсь писать под андройд. Но эта больная тема каждый раз бесит моё естесство. И судя по форуму у народа одни и теже вопросы.

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

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

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

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

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

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

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


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB