Немного о 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 понимает какие ресурсы нужны.

Но вы можете подстроить это значение под себя. Для этого понадобятся права Суперпользователя, чтобы внести изменения в соответствующий системный файл. Если вы уже их получили – приступаем, а если нет, стоит попробовать один из «однокликовых» эксплойтов вроде Framaroot, OneClickRoot или Kingo Root. К сожалению, данные программы могут рутировать не все модели, поэтому правильнее будет сначала установить кастомное Рекавери: TWRP или CWM и уже из него получить root права: https://4idroid.com/kak-poluchit-root-prava-na-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 шагает впереди планеты всей.

Поделиться
Плюсануть
Класснуть
  • Рубрика: Android