Плотность экрана в Android

Задумался я как-то: разные устройства с разными размерами экрана (физические размеры) при одинаковом количестве пикселей отображают разное количество информации. Почему так происходит? Просто в устройстве указана плотность экрана, которая зависит от отношения физического размера экрана к размеру картинки. Например, у меня в HTC Desire используется значние 240. Мы его можем изменить, получив картинку планшетника с большим экраном (например, при значении 140), или картинку бюджетника с маленьким экраном (при значении 300). Хотя всё это крайности, но в действительности, значение 200 вместо стандартных 240 на экране Desire, на мой взгляд, выглядит более приятно: умещается больше информации, элементы управления (выпадающие списки и пр.) не занимают так много места на экране и т.д. Меняя значение в бóльшую сторону, можно, например, облегчить работу с аппаратом для людей с ослабленным зрением.

Само значение хранится в файле /system/build.prop, в строчке «ro.sf.lcd_density=240», при наличии полного доступа к файловой системе (рута) можно просто изменить значение и перезаписать файл.

С другой стороны, это значение можно записать во временную память, даже без рут-доступа. Изменение будет сохранено до первой перезагрузки. Это и плюс (безопасно), и минус (после перезагрузки надо снова производить действия), но меня устраивает. Для получения и записей подобных значений используется команда getprop и setprop, соответственно, но писать надо не в ro.* (на то он и ro — read only), а в qemu:
setprop qemu.sf.lcd_density 200

После этого надо перезагрузить «графическую оболочку» для получения результата (помним, что при полной перезагрузке теряем изменения?). При наличии рута можно воспользоваться командой killall system_server, без рута можно выполнить остановку с последующим запуском оболочки последовательными командами stop и start (или adb stop и adb start, если аппарат позволит :) ).

Конечно, для подобных действий есть и готовые программы, например, платная и бесплатная, но им тоже нужен рут.

Ниже можно увидеть три окна (экран настроек, главный экран маркета и список приложений) при различных настройках плотности: 140, 160, 180, 200, 220, 240, 300. Напомню, что все резульаты получены на экране моего HTC Desire с диагональю экрана 3,7″ при разрешении 480×800 точек.

Но у всего есть пределы. Например, при density=100 можно представить, что держишь в руках огромный планшет, но работать в таком режиме некоторые программы уже отказываются :(

Андроид ,

25 comments


  1. Red Planet

    Вы пишете: «Ниже можно увидеть три окна (экран настроек, главный экран маркета и список приложений) при различных настройках плотности: 140, 160, 180, 200, 220, 240, 300.» Чем больше плотность, тем больше буквы. А не наоборот? Ведь дюйм равен 2.54 см, является постоянной величиной. Пусть буква занимает в ширину 10 пикселей. Рассмотрим на экранах в плотностью 160 и 240. Тогда получается, что при плотности в 160 у нас на 2.54 см вместится 16 букв, а при 240 — 24.

    • ArtRoman

      По поводу первого: всё верно – плотность больше, для сохранения масштабов система увеличивает размеры объектов. Система ведь сама не знает физические размеры экрана, для сохранения нормального масштаба мы сообщаем ей об этом в виде плотности. Увеличивая значение плотности мы делаем вид, что экран уменьшается. На самом же деле, размер экрана не меняется, но система увеличивает контент под «уменьшившийся» экран с тем же разрешением.
      По поводу математики — см выше, тут действует обратная зависимость – при большей плотности система использует больше пикселей для буквы, чтобы в абсолютном измерении она осталась такой же (опять же, при изменении абсолютного размера экрана). Но, так как у нас экран не меняется, получается, что просто увеличиваются буквы (да и вообще всё).

  2. Андрей

    Разьясните пожалуйста, а плотность экрана можно на постоянное применение сделать или только разовое действие. Если можно на постоянно, обьясните чуть- чуть подробнее, какие и где нужно прописать действия?
    С уважением Андрей.

    • ArtRoman

      Все параметры прописаны в файле /system/build.prop, при наличии рута его можно отредактировать. Например, в прошивке для Desire V, которая нашлась у меня на компе, этот параметр называется «ro.sf.lcd_density», думаю на других не сильно отличается.

  3. Андрей

    Спасибо! Нашёл я этот параметр и постарался его изменить на 160 Dpi, но отредактированный мной текст не изменился и там нужно менять ещё какое-то разрешение, типа rw-rw—r—r- и т.д.. Я не программист и в этом ни бум, бум, но так хочется сделать значки поменьше. А как можно расчитать, что бы примерно было 1024х600. Где-то прочитал, что редактировать такой файл нужно в каком-то cmod? что это и где его взять- не понял. Хожу по сайтам!

    • ArtRoman

      Этот файл находится на системном разделе. Его можно изменить в прошивке перед установкой этой прошивки, или скопировать на компьютер (adb pull /system/build.prop), отредактировать и отправить обратно (adb push build.prop /system/), предварительно получив доступ на запись в системный раздел (наверняка потребуется рут, adb remount).

    • The abiltiy to think like that shows you’re an expert

  4. сеня

    подскажите, у меня тело с экраном 320х480 как сделать 480х800? какие цифры прописать?

    • ArtRoman

      Вы собираетесь увеличить плоность почти в два раза при столь невысокой плотности экрана. Предупрежу, что читаемость текста и графики будет на не очень хорошем уровне (всё будет мелко, детали будут теряться). По поводу конкретных значений подсказать сложно, в прошивке для HTC Hero с аналогичным экраном вижу число 160, но я не знаю какая у вас диагональ. Для начала можно попробовать уменьшить до 120 (одно из стандартных значений).

  5. сеня

    какой текст будет не важно. хочу кое что попробовать. то есть: есть программа для экрана 480х800, когда я её запускаю она пишет что -у вас экран 480х320 а надо 480х800 что бы работала. вот таким способом можно её обмануть или нет? откуда она читает инфу о расширении экрана?
    диагональ под линейку 9 см.

  6. Здравствуйте. У меня есть большая проблема. У меня рутированый LG Optimus L3, я случайно(или нет, я вообще не понял как это произошло) поставил плотность экрана слишком высокую и теперь не могу пользоваться телефонов, всё очень большое и полностью не отображается. Я хотел зайти в рековери но не уверен был как это сделать. Я попробовал кнопку хоме включить, и громкость в низ и у меня поизошол хард ресет. Той програмы нету , с которой я ставил плотность. В рековери может можно это изменить?но я незнаю как туда зайти. Что мне делать?

    • ArtRoman

      При наличии рута вы можете с компьютера через ADB вытащить файл, внести нужные изменения и залить обратно. Этот файл находится в системе, поэтому сброс настроек не помогает. Можно восстановить файл из прошивки, если она есть в zip-формате, или просто перепрошить телефон.
      Если у вас кастомное рекавери, то всё это сделать проще из него, информацию по переключению в рекавери стоит посмотреть в сети, например, на форумах 4pda.

  7. андрей

    С другой стороны, это значение можно записать во временную память, даже без рут-доступа…… И как это сделать? Вы же ничего подробно не описали.

    • ArtRoman

      В некоторых случаях девайс даёт записать значение через setprop qemu.sf.lcd_density 200, далее остаётся лишь перезагрузить далвик, а это без рута уже не столь тривиально. На свежих системах setptop от имени обычного пользователя реально ничего не записывает.

      • Рамис

        Простите, а где прописывать эти команды?

        • ArtRoman

          Либо на компьютере, через adb shell (после установки Android SDK), либо на самом устройстве, установив любой эмулятор терминала.

          • Пингвин

            А можно подробно расписать как это сделать на Andorid 5.1 без рута? Изменять build.prop невозможно. Расскажите подробней, пофалуфта.

  8. Влад

    Здравствуйте, у меня возникла проблема на планшете андроид 4.4. Исчезла строка состояния и нет возможности ее вернуть. Есть ли какое решение этой проблемы?

  9. Сергей

    Подскажите!имеем тело с диагональю 5 дюймов.мой воспалёный мозг решил сделать его 7 дюймовым,а может даже 10.1

    Теперь вопрос,как мне сделать изображение тела под больший дисплей?

    Спасибо!!!

    • ArtRoman

      Всё как в статье. Уменьшаем виртуальную плотность, планшет считает, что экран увеличивается. Между диагональю 5 и 10.1″ разница чуть больше двух раз, плотность надо уменьшить в два раза, тогда и информации выведется примерно в два раза больше.
      При наличии рута меняем файл build.prop, не забываем про бекапы.

  10. Спасибо за полезную и интересную статью!

  11. никита

    У меня на планшете стояла плотность 260 все было огромное. Но я поставил 200 и все норм но только лаунчер не понял и все равно помещает 4×4 значка на главном экране

  12. никита

    Как сделать чтобы на главном экране умещалось больше значков а не только значки меньше

  13. на андроид 5.1.1 для ноут 2го плотность псотавил на 240(было 320) вот это уже что-то и хорошо что в самом найстройке добавили эти параметры вид супер!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *