Android Launcher Icon - мои ресурсы по умолчанию / mdpi избыточны?

Я новичок в разработке для Android (использую Mono для Android), я читал этот, этот и некоторые другие вопросы здесь, на SO, но я не уверен, как предоставить все необходимые файлы Icon для моего приложения.

  1. Из шаблона проекта IDE создал для меня drawable/ папка с файлом Icon.png размером 48x48 пикселей.
  2. Поскольку мне нужно предоставить альтернативные ресурсы, я взял файл PNG, который служит значком моего приложения, и использовал Android Asset Studio (упомянутую в документации), и он сгенерировал для меня следующие файлы:

drawable-hdpi/ic_launcher.png (72x72 px)

drawable-mdpi/ic_launcher.png (48x48 пикселей)

drawable-xhdpi/ic_launcher.png (96x96 пикселей)

drawable-xxhdpi/ic_launcher.png (144x144 px)

(Я не знаю почему, но Android Asset Studio не генерировал ldpi версии, поэтому я изменил размер иконки 36x36.)

Теперь я потерялся

1. Должен ли я сохранить копию 48x48 px в обоих drawable-mdpi/ а также drawable/ ?

Если я сохраню значок только в drawable-mdpi/ Может ли приложение аварийно завершить работу на старых устройствах / версиях Android (поскольку ресурс по умолчанию отсутствует)? 1. Если я сохраню значок только в drawable/ (запасной вариант), какой смысл использовать drawable-mdpi/ совсем?

Поскольку я точно не знаю, что делать, я оставил в своем проекте папки для рисования следующим образом:

drawable/ic_launcher.png (48x48 пикселей)

drawable-hdpi/ic_launcher.png (72x72 px)

drawable-ldpi/ic_launcher.png (36x36 пикселей)

drawable-mdpi/ic_launcher.png (48x48 пикселей)

drawable-xhdpi/ic_launcher.png (96x96 пикселей)

drawable-xxhdpi/ic_launcher.png (144x144 px)

Но это все еще не ясно для меня.


РЕДАКТИРОВАТЬ:

Если я предоставлю все возможные "альтернативные" ресурсы, то по умолчанию (drawable/) папка ресурса станет избыточной, поэтому я могу ее удалить. Однако я не хочу предоставлять ресурсы по умолчанию, потому что кажется более разумным сделать обратное: сначала предоставить ресурсы "по умолчанию", а затем предоставить "альтернативные" ресурсы по мере необходимости.

1 ответ

Решение

Эта цитата немного длинна, но вы должны прочитать, что об этом говорит документация:

Во время выполнения система обеспечивает наилучшее возможное отображение на текущем экране с помощью следующей процедуры для любого заданного ресурса: 1. Система использует соответствующий альтернативный ресурс. Исходя из размера и плотности текущего экрана, система использует любой размер и размер. специфичный для плотности ресурс в вашем приложении. Например, если устройство имеет экран с высокой плотностью и приложение запрашивает ресурс, который можно извлечь, система ищет каталог ресурсов для рисования, который наилучшим образом соответствует конфигурации устройства. В зависимости от других доступных альтернативных ресурсов каталог ресурсов с квалификатором hdpi (например, drawable-hdpi/) может быть наилучшим совпадением, поэтому система использует ресурс из этого каталога.

2.Если соответствующий ресурс недоступен, система использует ресурс по умолчанию и масштабирует его по мере необходимости для соответствия текущему размеру и плотности экрана. Ресурсы "по умолчанию" - это те, которые не помечены квалификатором конфигурации. Например, ресурсы в drawable/ являются ресурсами по умолчанию для рисования. Система предполагает, что ресурсы по умолчанию предназначены для базового размера и плотности экрана, который является нормальным размером экрана и средней плотностью. Таким образом, система масштабирует ресурсы плотности по умолчанию вверх для экранов высокой плотности и вниз для экранов низкой плотности, в зависимости от ситуации.

Однако когда система ищет ресурс, специфичный для плотности, и не находит его в каталоге, специфичном для плотности, она не всегда использует ресурсы по умолчанию. Вместо этого система может использовать один из других специфичных для плотности ресурсов, чтобы обеспечить лучшие результаты при масштабировании. Например, при поиске ресурса с низкой плотностью, а он недоступен, система предпочитает уменьшать версию ресурса с высокой плотностью, поскольку система может легко масштабировать ресурс с высокой плотностью до низкой плотности с помощью в 0,5 раза с меньшим количеством артефактов по сравнению с масштабированием ресурса средней плотности в 0,75 раза.

Таким образом, система будет искать лучший размер для любого устройства, на котором работает приложение. Если система ищет значок запуска 48x48, он будет выглядеть в drawable-mdpi/ first, потому что в документах предлагается поместить значок 48x48 в эту папку. Поскольку вы уже предоставили это, нет никаких причин, по которым приложению придется искать в папке drawable/ изображение по умолчанию. Даже если это произойдет, это не будет полезно, поскольку вы уже предоставили значок того же размера.

Если вы указали хотя бы один размер конкретного рисунка, ваше приложение не должно аварийно завершать работу ни на одном устройстве, даже если предоставленный вами размер очень неправильный. В этом случае изображение будет выглядеть плохо, потому что система загрузит предоставленное вами единственное изображение. Итак, если у вас есть изображение в папках drawable-*dpi, вам не понадобится копия в drawable/.

TL; DR

Нет, вам не нужно помещать 48x48 копию ic_launcher.png в папку drawable, если у вас уже есть одна в drawable-mdpi/, потому что система сначала выберет эту.

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