Немного о DPI и поддержке XXXHDPI в Android
Android является самой
распространённой мобильной операционной системой в мире, такое звание
обязывает его работать на экранах абсолютно разных разрешений,
варьирующихся от самых маленьких 128×128 точек до FullHD и больше,
например, экран Nexus 10 имеет разрешение 2560×1600. Для полного
понимания темы нужно разобраться, что же такое DPI и какую роль оно
играет в нашей жизни.
Итак, DPI (Dots Per Inch) —
количество точек на дюйм, обозначает разрешающую способность экранов
устройств. Всем и каждому совершенно ясно, что нет никакого смысла
рисовать высококачественную большую тяжёлую графику на экран с
разрешением 320×240 пикселей, а потому в Android предусмотрены некоторые
категории, каждая из которых совпадает с теми или иными аппаратными
характеристиками устройства.
- Low DPI (LDPI) = 120DPI
- Medium DPI (MDPI) = 160DPI
- High DPI (HDPI) = 240DPI (Nexus S, SGS2)
- Extra High DPI (XHDPI) = 320DPI (Galaxy Nexus, Nexus 4, SGS3)
- Extra Extra High DPI (XXHDPI) = 480DPI (HTC One и SGS4)
Мы
помним, что всё это говорится про 1 линейный дюйм, только вот в одном
случае на него приходится 120 точек, а в другом 480. В телефонах это
говорит только о чудовищной разнице в разрешении экранов, с планшетами
ситуация несколько иная, тот же Nexus 10 хоть и имеет разрешение
значительно большее, нежели FullHD в HTC One, но он
не XXHDPI-устройство, так как его экран физически больше во много раз.
Всем
разработчикам приходится рисовать графику сразу под множество
разрешений. Скажем, обычная иконка приложения для MDPI должна быть 48×48
пикселей, для HDPI — 72×72, для XHDPI уже 96×96. или вот ещё простой
пример с developer.android.com/design:
Разметка Android тоже делается не в
пикселях, а в dip'ах для унификации. Если все параметры прописывались бы
в пикселях, то на Galaxy Nexus был бы хороший статус-бар, а на Galaxy
S4 это была бы маленькая и тонкая полоса вверху, в которую и пальцем
было бы попасть нереально. Размер одного dip'а тоже зависит от DPI,
например при DPI=160 1dip=1px, а при DPI=320 1dip=2px. Именно из-за это
разницы высота статус-бара в реальной жизни, ровно как и кнопок
навигации, на вашем четырёхдюймовом Nexus 4 такая же, как и на
семидюймовом Nexus 7. Разработчики рисуют разные картинки, делают
разметку, а в устройстве выставляется то самое количество точек на дюйм,
благодаря чему Android понимает какие ресурсы ему нужны. Если у вас
есть рут-права, вы можете самостоятельно открыть build.prop, найти там
строку «ro.sf.lcd_density=» и поиграться со значениями(главное в
разумных пределах). После перезагрузки вы увидите изменения в
интерфейсе, а то и переключитесь на другой режим использования,
например, планшетный.
Расстраивает только то, что количество
приложений, поддерживающих экраны сверхвысокого разрешения крайне мало,
далеко не всегда уровень графики под стать плотности точек. И
казалось бы, что на XXHDPI в HTC One ничего не найти, кроме, разумеется,
приложений от Google и некоторых других известных и хороших
разработчиков. Но Android движется вперёд, и была добавлена новая
категория — XXXHDPI (Extra Extra Extra High DPI), что примерно 640 точек
на дюйм, такое получается при использовании разрешения Ultra HD или
4K, наглядно:
Разработчики Google пояснили,
что это категория введена для 4K-телевизоров, которых, к слову, не так
много. Или даже так — почти нет. В любом случае это хорошая новость,
ведь Android шагает впереди планеты всей.
Комментариев нет:
Отправить комментарий