Как работает папка mdpi, hdpi, xhdpi?

Выдержка из руководства разработчика Android по ссылке выше:

320dp: типичный экран телефона (240x320 точек на дюйм, 320x480 точек на дюйм, 480x800 точек на дюйм и т. Д.).
480 точек на дюйм: планшет-миниатюра типа Streak (480x800 точек на дюйм).
600 точек на дюйм: 7-дюймовый планшет (600x1024 точек на дюйм).
720 точек на дюйм: 10-дюймовый планшет (720x1280 точек на дюйм, 800x1280 точек на дюйм и т. Д.)

Так что я получил графику (изображения) с разрешением 320 пикселей на дюйм от дизайнера только в этих измерениях

480x800 точек на дюйм

720x1280 т / д

800x1280 т / д

Я запутался, какой размер изображения должны быть помещены в папку mdpi, папку hdpi и папку xhdpi. Я хочу сделать одно приложение, которое может работать на большинстве телефонов и планшетов Android?

4 ответа

Решение

Вы можете создавать различные графические объекты для использования с различной плотностью пикселей. Android рассматривает mdpi (160 пикселей / дюйм) в качестве базовой плотности. Так что для устройств с разрешением mdpi 1 дп = 1 пиксель. При более высоких плотностях больше пикселей на дюйм (240 для hdpi, 320 для xhdpi). Android пытается заставить графические изображения занимать одни и те же физические размеры на экране независимо от плотности пикселей устройства. Таким образом, если все, что он находит, является ресурсом mdpi, а устройство является hdpi, оно будет масштабировать графику на 240/160 = 150% и удвоит размер графики для xhdpi.

Если вам не нужно это автоматическое масштабирование (из-за которого графика может выглядеть плохо), вы можете просто предоставить собственную версию графических ресурсов для использования с более высокой плотностью. Эти графические объекты должны быть того же размера, что Android будет масштабировать ресурс MDDP.

Обратите внимание, что пиксели / дюйм, которые были сохранены в файле изображения, не имеют к этому никакого отношения. Все зависит от того, где вы поместили графические файлы в каталог ресурсов для вашего проекта. Любая графика размещена в res/drawable Предполагается, что они имеют правильный размер для дисплеев MDP, как и графика, res/drawable-mdpi, Файлы изображений, которые он находит в res/drawable-hdpi предполагается, что они имеют правильный размер для дисплеев HDMI и т. д. Когда ваша программа запускается на определенном устройстве, Android сначала будет искать графику, которая соответствует плотности отображения этого устройства. Если он не находит его, а вместо этого находит другой для другой плотности, он будет использовать его и автоматически масштабирует изображение на основе вышеуказанных правил.

Когда вы запрашиваете ресурс, для которого вы предоставляете альтернативы, Android выбирает, какой альтернативный ресурс использовать во время выполнения, в зависимости от текущей конфигурации устройства. Чтобы продемонстрировать, как Android выбирает альтернативный ресурс, предположим, что следующие нарисованные каталоги содержат разные версии одних и тех же изображений:

drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

И предположим, что следующая конфигурация устройства:

Locale = en-GB 
Screen orientation = port 
Screen pixel density = hdpi 
Touchscreen type = notouch 
Primary text input method = 12key

Сравнивая конфигурацию устройства с доступными альтернативными ресурсами, Android выбирает drawables из drawable-en-port.

Система приходит к решению, какие ресурсы использовать со следующей логикой:

Ссылка: как Android находит наиболее подходящий ресурс

Другие ссылки: Плотность независимости, Предоставление альтернативных ресурсов и лучших практик

И я скажу, что вы должны прочитать полную страницу Поддержка нескольких экранов, я не думаю, что ничто не будет лучше документации, чем это...

Я запутался во всей фрагментации по размеру экрана, но вот основы: 1. Вам необходимо создавать различные папки в макетах для работы с изображениями 2. Изображения будут находиться в папках drawables также в разных папках. 3. У вас должна быть базовая /layout и /drawable папка для сопровождения неспецифических папок. 4. Работайте с xhdpi, затем уменьшайте изображения!

Примеры для определенных папок экрана: /layout-hdpi /layout-xhdpi /drawable-hdpi /drawable-xhdpi

Из того, что я знаю: 480 x 800 - это hdpi (старые телефоны, например, S2, HTC Desire и т. Д.) 720 x 1280 - это xhdpi (новые телефоны, например, S3, Galaxy Nexus и т. Д.)

В основном, в зависимости от телефона, Android будет извлекать ресурсы из нужной папки, а если ее нет, он будет извлекать из основной папки "\ layout" или "\ drawable". Например, приложение, работающее на Galaxy Nexus, будет извлекать ресурсы из "\ layout-xhdpi", если папка существует.

Да, вы можете сделать одно приложение, но нужно было создавать папки: /res/drawable, /res/drawable-mdpi, /res/drawable-hdpi и добавлять контент для всех размеров экрана

Другие вопросы по тегам