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

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

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

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

drawable-mdpi/ic_launcher.png (48x48 px)

drawable-xhdpi/ic_launcher.png (96x96 px)

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

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

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

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

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

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

drawable/ic_launcher.png (48x48 px)

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

drawable-ldpi/ic_launcher.png (36x36 px)

drawable-mdpi/ic_launcher.png (48x48 px)

drawable-xhdpi/ic_launcher.png (96x96 px)

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

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


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

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


person Eduardo Coelho    schedule 11.04.2013    source источник


Ответы (1)


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

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

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

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

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

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

TL;DR

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

person mattgmg1990    schedule 11.04.2013
comment
Итак, 1) Могу ли я использовать в качестве общего правила всегда помещать ресурсы растровых изображений (png, jpg, ...) во все drawable-*dpi папки, кроме папки по умолчанию drawable? 2) Гарантируется ли, что приложение не выйдет из строя, независимо от устройства, если я не предоставлю ресурс по умолчанию drawable? (учитывая, что я предоставляю по крайней мере один альтернативный ресурс, например: drawable-xhdpi). Я боюсь не указать вариант по умолчанию, потому что: 2.If no matching resource is available, the system uses the default resource and scales it up or down as needed to match the current screen size and density - person Eduardo Coelho; 12.04.2013
comment
Я мог бы сначала указать значение по умолчанию, а затем при необходимости предоставить альтернативу. Но я делаю наоборот, слишком беспокоюсь обо всех альтернативных возможностях и не предоставляю вариант по умолчанию. - person Eduardo Coelho; 12.04.2013
comment
Исходя из моего опыта и чтения цитируемого раздела документации, я согласен с номером 1. Если вы, как правило, предоставляете все изображения с определенной плотностью, у вас не должно возникнуть проблем, когда система пытается найти какое-либо изображение. Что касается 2., я думаю, это относится только к случаю, когда изображение вообще отсутствует в каких-либо каталогах * dpi. Если у вас есть какое-либо изображение с этим именем в другой папке с возможностью рисования, оно будет его использовать. Я думаю, что приоритетом будет: совпадающая папка * dpi - ›drawable / -› несовпадающая папка * dpi - person mattgmg1990; 12.04.2013