Немного о DPI и поддержке XXXHDPI в Android



Немного о DPI и поддержке XXXHDPI в Android


Android является самой распространённой мобильной операционной системой в мире, такое звание обязывает его работать на экранах абсолютно разных разрешений, варьирующихся от самых маленьких 128×128 точек до FullHD и больше, например, экран Nexus 10 имеет разрешение 2560×1600. Для полного понимания темы нужно разобраться, что же такое DPI и какую роль оно играет в нашей жизни.
devices_displays_main
Итак, 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-устройство, так как его экран физически больше во много раз.
img_1110001583
Всем разработчикам приходится рисовать графику сразу под множество разрешений. Скажем, обычная иконка приложения для MDPI должна быть 48×48 пикселей, для HDPI — 72×72, для XHDPI уже 96×96. или вот ещё простой пример с developer.android.com/design:
devices_displays_density@2x
Разметка 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, наглядно:
4k_w_fullhd
Разработчики Google пояснили, что это категория введена для 4K-телевизоров, которых, к слову, не так много. Или даже так — почти нет. В любом случае это хорошая новость, ведь Android шагает впереди планеты всей.

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

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