В документации по Android SDK все примеры, используемые с синтаксисом @ drawable / my_image xml, напрямую относятся к изображениям, которые хранятся в каталоге res / drawable в моем проекте.
Мне интересно, если это явно не хорошо, чтобы создать подкаталог в каталоге Drawable.
Например, если у меня была следующая структура каталогов:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
Могу ли я сослаться на изображение бутерброда с салатом из тунца как @ drawable / sandwiches / tunaOnRye
Или я должен сохранить иерархию в каталоге drawable.
android
drawable
android-resources
Пеппер Лебек-Жобе
источник
источник
Ответы:
Нет, механизм ресурсов не поддерживает подпапки в каталоге drawable, так что да - вам нужно сохранить эту иерархию плоской.
Макет каталога, который вы показали, не приведет ни к одному из доступных изображений.
Из моих собственных экспериментов кажется, что наличие подпапки с любыми элементами в этой
res/drawable
папке приведет к сбою компилятора ресурсов, что не позволитR.java
правильно сгенерировать файл.источник
Обходной путь, который я использую (и, похоже, предпочитает сам Android), состоит в том, чтобы по существу заменить знак подчеркивания косой чертой, чтобы ваша структура выглядела примерно так:
Подход требует от вас тщательности в наименовании и не делает так, чтобы самим было легко разбираться в файлах (если вы решили, что напитки и бутерброды действительно должны быть "
food
", вам придется сделать массовое переименование, а не просто перемещение их в каталог); но сложность вашей внутренней логики не пострадало слишком сильно по сравнению со структурой папок эквивалента.Эта ситуация действительно отстой. Android представляет собой смешанный пакет замечательных и ужасных дизайнерских решений. Мы можем только надеяться, что последняя часть будет отсеяна со всей поспешностью :)
источник
На самом деле, на Android Studio это возможно. Вы можете иметь вложенные ресурсы, как показано здесь :
Существует также плагин для группы ресурсов здесь .
источник
Да - это отстой :) Однако вы можете использовать папку активов и иметь подкаталоги там и загружать изображения таким образом.
источник
Использовать папку ресурсов.
образец кода:
источник
Я написал плагин eclipse, который позволяет создавать виртуальную подпапку, разделяя имя файла двумя подчеркиваниями
__
. Проект находится на ранней стадии, но не волнуйтесь, он не сломает вашу IDEБолее подробную информацию можно найти здесь, не стесняйтесь раскошелиться и отправлять запросы на извлечение:
https://github.com/kirill578/Android-Sorted-Res-Folder
источник
Мне нравится использовать простой сценарий, чтобы сгладить организованную структуру каталогов, предоставленную дизайнерами, для чего-то, что можно использовать для генерации R-файла.
Запустите с текущим путем в drawable-hdpi:
источник
В Android Studio с Gradle вы можете иметь несколько директоров источников, которые позволят вам разделить ресурсы. Например:
Однако имена не должны совпадать, что означает, что вам все равно нужно иметь такие имена, как sandwiches_tunaOnRye, но у вас будет возможность иметь отдельный раздел для всех ваших сэндвичей.
Это позволяет хранить ваши ресурсы в разных структурах (полезно для автоматически сгенерированного контента, такого как actionbargenerator)
источник
Один из способов частично обойти проблему - использовать суффикс уровня API. Я использую res / layout-v1, res / layout-v2 и т. Д. Для хранения нескольких подпроектов в одном apk. Этот механизм может использоваться для всех типов ресурсов.
Очевидно, это можно использовать, только если вы нацеливаетесь на уровни API выше res / layout-v? ты используешь.
Также следите за ошибкой в Android 1.5 и 1.6. См. Документацию Andoroid о суффиксе уровня API .
источник
С появлением библиотечной системы создание библиотеки на большой набор ресурсов может стать решением.
Это по-прежнему проблематично, так как следует избегать использования одинаковых имен во всех ресурсах, но использование схемы префикса для библиотеки должно помочь в этом.
Это не так просто, как возможность создавать папки, но это помогает держать вещи в здравом уме ...
источник
В этой ситуации есть обходной путь: вы можете создать
resVector
(например) папку на том же уровне, что иres
папка по умолчанию . Там вы можете добавитьdrawable-xxx
туда любые папки ресурсов:После этого все, что вам нужно, это добавить
в ваш
build.gradle
файл (внутриandroid { }
).источник
Это не идеальные методы. Вы должны реализовать тот же способ, который отображается здесь .
Вы также можете вызвать изображение в папке через код, который вы можете использовать
источник
Не моя, но я нашел эту ветку, когда искал эту проблему, если вы используете Android Studio и систему Gradle Build, это довольно просто, никаких плагинов не требуется, просто небольшое редактирование файла сборки
https://stackoverflow.com/a/22426467/618419
источник
Gradle с Android Studio может сделать это таким образом ( ссылка ).
Это в пункте «Настройка структуры»
источник
создать папку в главном. как: 'res_notification_btn'
и создать папку дерева в. как «Drawable» или «макет»
затем в «build.gradle» добавить это
источник
источник
Проверьте скрипт Bash Flatten Folder, который преобразует иерархию папок в одну папку
источник
assets / Вы можете использовать его для хранения необработанных файлов активов. Файлы, которые вы сохраняете здесь, скомпилированы в файл .apk как есть, и исходное имя файла сохраняется. Вы можете перемещаться по этому каталогу так же, как и в обычной файловой системе, используя URI, и читать файлы как поток байтов, используя AssetManager. Например, это хорошее место для текстур и игровых данных. http://developer.android.com/tools/projects/index.html
источник
Подкаталоги недопустимы, ресурс должен содержать только [a-z0-9_.].
Нет у вас заглавных букв и нет косой черты.
источник
источник