Вопрос по android, android-resources – Может ли каталог для рисования Android содержать подкаталоги?

454

В документации по 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.

Обратите внимание, что заглавные буквы не разрешены в каталоге res. Tyler
Возможно ли иметьSIBLING каталоги для рисования, с функцией рисования? Итак, res / tanks / drawble- [hdpi .. и т.д.] и так далее? Fattie
Вы можете сделать это только с Gradle:stackoverflow.com/a/19859379 Yair Kukielka

Ваш Ответ

20   ответов
-2
Right click on Drawable Select New ---> Directory Enter the directory name. Eg: logo.png(the location will already show the drawable folder by default) Copy and paste the images directly into the drawable folder. While pasting you get an option to choose mdpi/xhdpi/xxhdpi etc for each of the images from a list. Select the appropriate option and enter the name of the image. Make sure to keep the same name as the directory name i.e logo.png Do the same for the remaining images. All of them will be placed under the logo.png main folder.
9

чтобы сгладить организованную структуру каталогов, предоставленную дизайнерами, для чего-то, что можно использовать для генерации R-файла.

Запустите с текущим путем в drawable-hdpi:

#! /bin/bash
DIRS=`find * -type d`
for dir in ${DIRS} ; do 
  for file in `ls ${dir}` ; do
    mv ${dir}/${file}  ${dir}_${file};
  done 
  rmdir ${dir};
done
Error: User Rate Limit Exceeded
20

который позволяет создавать виртуальную подпапку, разделяя имя файла двумя подчеркиваниями.__, Проект находится на ранней стадии, но не волнуйтесь, он не сломает вашу IDE

Более подробную информацию можно найти здесь, не стесняйтесь раскошелиться и отправлять запросы на извлечение:

https://github.com/kirill578/Android-Sorted-Res-Folder

enter image description here

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/a/22426467/618419
2

resVector (например) папка на том же уровне, что и по умолчаниюres папка. Там вы можете добавить любойdrawable-xxx папки ресурсов там:

resVector
-drawable
-layout
-color

После этого все, что вам нужно, это добавить

sourceSets {
        main.res.srcDirs += 'src/main/resVector'
    }

в вашbuild.gradle файл (внутриandroid { }).

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
9

ков, которые позволят вам разделить ресурсы. Например:

android {
    ....
    android.sourceSets {
        main.res.srcDirs = ['src/main/extraresdirnamed_sandwiches', 'src/main/res']
    }
    ....
}

Однако имена не должны совпадать, что означает, что вам все равно нужно иметь такие имена, как sandwiches_tunaOnRye, но вы сможете иметь отдельный раздел для всех своих сэндвичей.

Это позволяет хранить ваши ресурсы в разных структурах (полезно для автоматически сгенерированного контента, такого как actionbargenerator)

33

) Однако вы можете использовать папку активов и иметь подкаталоги там и загружать изображения таким образом.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
2

ресурсов может стать решением.

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

Это не так просто, как возможность создавать папки, но это помогает держать вещи в здравом уме ...

Error: User Rate Limit Exceeded
1

и создайте папку дерева в. like & apos; drawable & apos; или «макет»;

затем в «build.gradle»; Добавь это

sourceSets
            {
                main
                {
                    res
                    {
                        srcDirs = ['src/main/res_notification_btn', 'src/main/res']
                      or
                        srcDir 'src/main/res_notification_btn'
                    }
                }
            }
0

Нет у вас заглавных букв и нет косой черты.

0

    Вы можете использовать его для хранения необработанных файлов активов. Файлы, которые вы сохраняете здесь, скомпилированы в файл .apk как есть, и исходное имя файла сохраняется. Вы можете перемещаться по этому каталогу так же, как и в обычной файловой системе, используя URI, и читать файлы как поток байтов, используя AssetManager. Например, это хорошее место для текстур и игровых данных. http://developer.android.com/tools/projects/index.html

4

я API. Я использую res / layout-v1, res / layout-v2 и т. Д. Для хранения нескольких подпроектов в одном apk. Этот механизм может использоваться для всех типов ресурсов.

Очевидно, это можно использовать, только если вы ориентируетесь на уровни API выше res / layout-v? ты используешь.

Также следите за ошибкой в Android 1.5 и 1.6. См. Документацию Andoroid о суффиксе уровня API.

Error: User Rate Limit Exceeded
500

механизм ресурсов не поддерживает подпапки в каталоге drawable, так что да - вам нужно сохранить эту иерархию плоской.

Макет каталога, который вы показали, не приведет ни к одному из доступных изображений.

Из моих собственных экспериментов кажется, что наличие подпапки с любыми элементами в нейres/drawable папку, приведет к сбою компилятора ресурса - предотвращениеR.java файл сгенерирован правильно.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededcode.google.com/p/android/issues/detail?id=2018
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0
#!/usr/bin/env ruby

# current dir should be drawable-hdpi/ etc

# nuke all symlinks
Dir.foreach('.') {|f|
    File.delete(f) if File.symlink?(f)
}

# symlink all resources renaming with underscores
Dir.glob("**/*.png") {|f|
    system "ln -s #{f} #{f.gsub('/', '_')}" if f.include?("/")
}
Error: User Rate Limit Exceeded
1

ссылка на сайт).

Это в параграфе «Конфигурирование структуры».

sourceSets {
 main {
    java {
        srcDir 'src/java'
    }
    resources {
        srcDir 'src/resources'
    }
 }
}
1

но я нашел эту ветку, когда искал эту проблему, если вы используете Android Studio и систему Gradle Build, это довольно просто, никаких плагинов не требуется, просто небольшое редактирование файла сборки

https://stackoverflow.com/a/22426467/618419

144

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

sandwich_tunaOnRye.png
sandwich_hamAndSwiss.png
drink_coldOne.png
drink_hotTea.png

Этот подход требует от вас тщательности в наименовании и не позволяет значительно упорядочить сами файлы (если вы решили, что на самом деле все напитки и бутерброды должны быть & quot;food& quot ;, вам нужно сделать массовое переименование, а не просто переместить их в каталог); но сложность вашей логики программирования не страдаетtoo плохо по сравнению с эквивалентной структурой папок.

Эта ситуация действительно отстой. Android представляет собой смешанный пакет замечательных и ужасных дизайнерских решений. Мы можем только надеяться, что последняя часть будет отсеяна со всей поспешностью :)

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededturkeyError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Вот.

Вы также можете вызвать изображение в папке через код, который вы можете использовать

Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);
32

на Android Studio это возможно. Вы можете иметь вложенные ресурсы, как показаноhere :

enter image description here

Также есть плагин для группировки ресурсовhere.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededschemas.android.com/apk/res/androidError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Скрипт Bash Flatten Folder который преобразует иерархию папок в одну папку

22

образец кода:

InputStream is = null;
try {
    is = this.getResources().getAssets().open("test/sample.png");
} catch (IOException e) {
    ;
}

image = BitmapFactory.decodeStream(is);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы