воскресенье, 26 августа 2012 г.

Гриффи взялась за резец, Droid`s пришел конец....

       Новый планшет Nexus 7 оснащен  великолепным экраном. разрешение впечатляет:  800х1280 пикселей, диагональ 7 дюймов. Стандартная же картинка у подобных устройств имеет разрешение всего 600х1024. Конечно, чем больше разрешение монитора, тем лучше качество приложений по внешнему виду, но возникает и вопрос адаптации под него этих программ разработчиками. Масла в огонь подлила портретная ориентация («телефонность») UI Android, которая отличает этот планшет. Скажите вслух: «A-a-a-a-and-d-d-dr-r-r-r-ro-o-o-o-oid fr-r-r-r-ragmenta-a-a-a-ation!!!». 
  
Почти сразу, как вышел  Nexus 7 на Google+ (где обычно появляются посты от инженеров «Гугла») появился... пост от инженера «Гугла», руководителя группы по работе над фреймворком Android Дайэны Хэкборн (Dianne Hackborn), известной разработчикам под Android под ником hackbod.

 В посте Дайэн рассказала о нюансах экрана Nexus 7, его сходствах с экранами и отличиях от традиционных 7-дюймовых планшетов. К сожалению, непонятные технические термины отбили охоту у читателей разбираться в вопросе. Еще она запутала и разработчиков, попросив не создавать адаптированного под этот планшет ПО. До сих пон не ясно, откуда она вытащила непонятное разрешение 600х961 (при чем тут это, разрешение же вроде 800х1280?), что  новая плотность экрана tvdpi (dpi вроде понятно, но телевизор тут при чем?). Сама она свои ляпы никогда не исправляет, а на критику отвечает резко и  агрессивно. Попробуем разобраться сами…
 
ОС Android не установила ограничений на размер и разрешение устройств, на которых допустима его работа. Изначально такое оно было: в младенчестве (1.5 Cupcake на HTC G1) Android поддерживал только 1 разрешение — HVGA (320x480) на экране с диагональю 3,5 дюйма. Уже со следующей версии эта проблема была устранена. Причина тут проста: разнообразие Android устройств должно быть максимальным. Поводы для разработчиков софта (как программистов, так и дизайнеров) и для инженеров Google возросли по экспоненте:

  • физические размеры экранов разбиваются на диапазоны: small (от 2 до 3,5 дюймов с нестандартным соотношением сторон), normal (от 3 до 4 дюймов), large (от 4 до 7 дюймов), xlarge (от 7 до 10 дюймов)
  • пиксельная плотность экранов (dpi) тоже разбивается на диапазоны: ldpi (120), mdpi (160), hdpi (240), xhdpi (320)
  • производитель устройства прописывает в прошивке, в какой диапазон по размеру и плотности данное устройство попадает
  • разработчик приложений включает в приложение необходимые (по его мнению) интерфейсные и графические ресурсы, рассортировав их в определенные папки, по диапазонам.
  Когда вы запускаете нуждное приложение, Android уже знает (из свойств прошивки), какие диапазоны работают, берет ресурсы только из нужных папок. Если ресурса для разрешения нет, то Android поищет одноименный ресурс в другой папке и адаптирует его для нужного диапазона. Полученная более компактная копия в качестве не потеряет. Схема эта хорошо себя зарекомендовала. От разработчиков даже не требуют создавать и включать в программу ресурсы ldpi, ведь их легко создать на базе hdpi (самого популярного на данный момент диапазона). Нужно лишь исключить каждый второй пиксель по вертикали и горизонтали.
Содержимое папки /res последней версии Google Maps

В *dpi-папки кладут именно графику. Чем выше dpi, тем больше должен быть формат картинки, чтобы она получалась похожего размера на экране. А для чего тогда нужен размер экрана? Именно он и определяет «планшетность» или «телефонность» мобильного устройства. Чем больше этот показатель, тем удобнее им пользоваться. Разбивка на диапазоны поможет без проблем запрограммировать логику процесса. в папку для normal кладут телефонную конфигурацию с одним списком на каждый экран, а для ресурсов xlarge планшетную конфигурацию UI (layout) с двумя списками на одном экране.


Интересный факт: как было сказано выше, при подборе замены для графического ресурса (картинки) Android ищет «сверху вниз», от более высоких разрешений к низким. А вот при подборе замены для раскладки UI (layout) Android идет в противоположном направлении — используется раскладка для меньшего экрана. И если первое очевидно (если нет, то растяните картинку в графическом редакторе и посмотрите, что будет с качеством), то во второе надо чуть вдуматься. Дело в том, что попытка впихнуть планшетную раскладку на телефонный экран может привести к тому, что приложением будет практически невозможно пользоваться, в то время как телефонная раскладка на экране планшета вполне функциональна, хоть и не так красива.

Размеры собственно элементов UI измеряютсяв пискелях. даже размер шрифтов измеряется именно так. Если разработчик оптимизировал размер шрифтов под mdpi-экран в раскладке UI для телефона (размеры шрифтов указаны именно там). Пользователь запустил приложение на телефоне с экраном этого размера, но с xhdpi-плотностью. размер в пикселях останется прежним, а физический видимо уменьшится. Читать будет не удобно. выручает в таких случаях формат dp — density independent pixels. Пиксели в этом случае чихают с высокой колокольни на плотность. Фактически они референсные, идеальны для плотности mdpi. Выбор mdpi как референсной плотности сделан из исторических соображений. Первый телефон на Android имел плотность именно mdpi. Все размеры задаются именно в в dp. наш милый андроид же, оперируя отношением плотности данного экрана к референсной и размерами монитора, сам высчитает и необходимый размер и увеличит, если понадобится, шрифт.
Уже с версии 3.2 Android предоставляет разработчику солидный контроль над конфигурацией UI для разных форматов экранов. Разработчик может оперировать такими величинами, как: «минимальная ширина» экрана, при достижении которой будет автоматически выбрана конкретная раскладка. Диапазоны он определяет сам. Становится возможным задавать собственные диапазоны для каждого экрана, т.е. получать оптимизированные UI под каждый.

А по-человечески перевести отчет Даэйн можно следующим образом.
 
Nexus 7 относится к категории планшет. Мобильнлое устройство очень похоже на анадогичных собратьев. Разрешение у Nexus 7 800х1280, поэтому исопльзуется формат tvdpi. Если произвести перерасчет на традиционную ширину в 600 пикселей, то  разрешение Nexus 7 получится 600х961. Соотношение сторон 16:9. Доступная площадь монитора практически та же. Раскладки UI, созданные под 7-дюймовые планшеты, идеально ложатся на экран Nexus 7 

Незнакомое tvdpi является новым диапазоном плотности, созданный для приложений под 720p-телевизоры (для 1080p-телевизоров используется xhdpi). Специальной оптимизации он не требует. Не рекомендуется разработчикам создавать отдельные графические ресурсы под него. Android и сам умеет приспосабливать наличные графические ресурсы для нужной плотности экрана. Эту способность настоятельно рекомендуется ставить во главу угла. Артефакты (побочные явления) можно невелировать следующими методами:

  • Артефакты намного меньше заметны на экранах высокого разрешения, как у Nexus 7.
  • При создании графического ресурса Android обычно использует ресурсы для более высокой плотности экрана. В данном случае, скорее всего, это будет hdpi, который использует подавляющее большинство устройств, соответственно, ресурсы для него есть практически в каждом приложении.
  • Планшетный UI использует иконки «на размер больше», чем данная плотность экрана. В рассматриваемом случае это опять популярный hdpi. Причем он будет использоваться в оригинальном размере, то есть с максимальным качеством.
        Несмотря на абсолютно новое разрешение экрана, соотношение сторон и плотность, девелоперам особо проблем не прибавилось. Их приложения адекватно работали и на Nexus 7. Дайэн пишет: «Nexus 7 послужил отличным тестом возможностей Android приспосабливаться к разным экранам. При создании UI Jelly Bean им пришлось создать только один графический ресурс tvdpi — для фона выпадающей панели уведомлений».

Комментариев нет :

Отправить комментарий

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