Na documentação do Android SDK, todos os exemplos usados com a sintaxe @ drawable / my_image xml abordam diretamente as imagens armazenadas no diretório res / drawable em meu projeto.
Gostaria de saber se não é explicitamente permitido criar um subdiretório dentro do diretório drawable.
Por exemplo, se eu tivesse o seguinte layout de diretório:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
Posso referenciar a imagem de um sanduíche de salada de atum como @ drawable / sandwiches / tunaOnRye
Ou eu tenho que manter a hierarquia plana no diretório drawable.
android
drawable
android-resources
Pimenta Lebeck-Jobe
fonte
fonte
Respostas:
Não, o mecanismo de recursos não suporta subpastas no diretório drawable, então sim - você precisa manter essa hierarquia plana.
O layout do diretório que você mostrou resultaria em nenhuma das imagens disponíveis.
De meus próprios experimentos, parece que ter uma subpasta com itens dentro da
res/drawable
pasta fará com que o compilador de recursos falhe - impedindo que oR.java
arquivo seja gerado corretamente.fonte
A solução alternativa que estou usando (e a que o próprio Android parece favorecer) é substituir essencialmente um sublinhado por uma barra, para que sua estrutura fique assim:
A abordagem exige que você seja meticuloso na nomeação e não facilita muito a organização dos arquivos (se você decidiu que bebidas e sanduíches realmente deveriam ser todos "
food
", seria necessário renomear em massa em vez de simplesmente movendo-os para o diretório); mas a complexidade da sua lógica de programação não sofre muito em comparação com o equivalente da estrutura de pastas.Esta situação é realmente péssima. O Android é uma mistura de decisões maravilhosas e terríveis de design. Só podemos esperar que a última parte seja eliminada com toda a pressa :)
fonte
Na verdade, no Android Studio é possível. Você pode ter recursos aninhados, como mostrado aqui :
Há também um plug-in para agrupar recursos aqui .
fonte
Sim - é péssimo :) Entretanto, você pode usar a pasta assets e ter subdiretórios lá e carregar imagens dessa maneira.
fonte
Use a pasta de ativos.
Código de amostra:
fonte
Eu escrevi um plug-in do eclipse que permite criar subpastas virtuais, separando o nome do arquivo com dois sublinhados
__
. O projeto está nos estágios iniciais, mas não se preocupe, não irá travar seu IDEmais detalhes podem ser encontrados aqui, fique à vontade para enviar e enviar solicitações pull:
https://github.com/kirill578/Android-Sorted-Res-Folder
fonte
Eu gosto de usar um script simples para nivelar uma estrutura de diretório organizada fornecida pelos designers para algo que pode ser usado para gerar um arquivo R.
Execute com o caminho atual em drawable-hdpi:
fonte
No android studio com gradle, você pode ter vários diretores de origem, que permitem separar recursos. Por exemplo:
No entanto, os nomes não devem colidir, o que significa que você ainda precisará ter nomes como sandwiches_tunaOnRye, mas poderá ter uma seção separada para todos os seus sanduíches.
Isso permite que você armazene seus recursos em diferentes estruturas (útil para conteúdo gerado automaticamente, como actionbargenerator)
fonte
Uma maneira de contornar parcialmente o problema é usar o sufixo no nível da API. Eu uso res / layout-v1, res / layout-v2 etc para manter vários subprojetos no mesmo apk. Este mecanismo pode ser usado para todos os tipos de recursos.
Obviamente, isso só pode ser usado se você estiver direcionando os níveis da API acima do res / layout-v? você está usando.
Além disso, atente para o bug no Android 1.5 e 1.6. Consulte a documentação do Andoroid sobre o sufixo no nível da API .
fonte
Com o advento do sistema de bibliotecas, criar uma biblioteca por grande conjunto de ativos pode ser uma solução.
Ainda é problemático, pois é preciso evitar o uso dos mesmos nomes em todos os ativos, mas o uso de um esquema de prefixo por biblioteca deve ajudar nisso.
Não é tão simples como criar pastas, mas isso ajuda a manter as coisas sãs ...
fonte
Existe uma solução alternativa para esta situação: você pode criar uma
resVector
pasta (por exemplo) no mesmo nível dares
pasta padrão . Lá você pode adicionar quaisquerdrawable-xxx
pastas de recursos:Depois disso, tudo o que você precisa é adicionar
no seu
build.gradle
arquivo (dentroandroid { }
).fonte
Este não é um método perfeito. Você deve implementar da mesma maneira que é exibida aqui .
Você também pode chamar a imagem na pasta através do código que pode usar
fonte
Não é meu, mas eu encontrei este tópico ao procurar esse problema, se você estiver usando o sistema Android Studio e Gradle Build é muito fácil, sem plugins necessários, apenas uma pequena edição do arquivo de compilação
https://stackoverflow.com/a/22426467/618419
fonte
Gradle com o Android Studio poderia fazê-lo desta maneira ( link ).
Está no parágrafo "Configurando a estrutura"
fonte
crie uma pasta no main. como: 'res_notification_btn'
e crie uma pasta na árvore em. como 'drawable' ou 'layout'
depois em 'build.gradle' adicione este
fonte
fonte
Verifique o script Bash Flatten Folder que converte a hierarquia de pastas em uma única pasta
fonte
ativos / Você pode usá-lo para armazenar arquivos de ativos brutos. Os arquivos que você salva aqui são compilados em um arquivo .apk como estão e o nome do arquivo original é preservado. Você pode navegar neste diretório da mesma maneira que um sistema de arquivos típico usando URIs e ler arquivos como um fluxo de bytes usando o AssetManager. Por exemplo, este é um bom local para texturas e dados de jogos. http://developer.android.com/tools/projects/index.html
fonte
Os subdiretórios não são permitidos, o recurso deve conter apenas [a-z0-9_.].
Não, você tem letras maiúsculas e sem barras.
fonte
fonte