Pergunta

Na documentação SDK Android, todos os exemplos usados ??com o @ drawable / my_image xml sintaxe diretamente imagens de endereços armazenados no res diretório / drawable no meu projeto.

Eu estou querendo saber se é explicitamente não está bem para criar um sub-diretório dentro do diretório drawable.

Por exemplo, se eu tinha a seguinte estrutura de diretório:

res/drawable
-- sandwiches
  -- tunaOnRye.png
  -- hamAndSwiss.png
-- drinks
  -- coldOne.png
  -- hotTea.png

Eu poderia fazer referência a imagem de um sanduíche de salada de atum como @ drawable / sanduíches / tunaOnRye

Ou eu tenho que manter o apartamento hierarquia no diretório drawable.

Foi útil?

Solução

Não, o mecanismo de recursos não suporta subpastas no diretório drawable, então sim -. Você precisa para manter esse plano hierarquia

O diretório layout que você mostrou resultaria em nenhuma das imagens que estão disponíveis.

De minhas próprias experiências, parece que tem uma subpasta com nenhum item em que, dentro da pasta res/drawable, fará com que o compilador de recursos para falhar -. Impedindo o arquivo R.java sejam geradas corretamente

Outras dicas

A solução que eu estou usando (eo próprio um Android parece favor) é substituir essencialmente um sublinhado para uma barra, assim que sua estrutura seria algo parecido com isto:

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

A abordagem exige que você seja meticuloso na sua nomeação e não torná-lo muito mais fácil para disputar os próprios arquivos (se você decidiu que bebidas e sanduíches realmente deve ser todos "food", você teria que fazer uma massa renomear ao invés de simplesmente movê-los para o diretório); mas a complexidade da sua lógica de programação não sofre muito mal em comparação com a estrutura da pasta equivalente.

Esta situação é uma porcaria mesmo. Android é uma mescla de decisões de design maravilhosas e terríveis. Podemos única esperança para a última parte de se eliminados com a devida pressa:)

Sim. - ele faz sugar :) No entanto, você pode usar os ativos de pasta e têm sub-diretórios lá e carga imagens que maneira

Na verdade, no Android Estúdio é possível. Você pode ter recursos aninhados como mostrado aqui :

 enter descrição da imagem aqui

Há também um plugin para agrupar recursos aqui .

Usar pasta ativos.

código de exemplo:

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

image = BitmapFactory.decodeStream(is);

Eu escrevi um eclipse plug-in que permite criar subpasta virtual separando o nome do arquivo com dois sublinhados __. O projeto está em fase inicial, mas não se preocupe que não vai travar o seu IDE

mais detalhes podem ser encontrados aqui, sinta-se livre para garfo e pedidos de envio de tração:

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

enter descrição da imagem aqui

Eu gosto de usar um script simples para achatar uma estrutura de diretório organizado fornecidos por designers para algo que pode ser usado para gerar um arquivo de R.

Executar com o caminho atual em 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

No estúdio android com Gradle você pode ter vários diretores fonte que lhe permitirá separar recursos. Por exemplo:

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

No entanto, os nomes devem não colidem que significa que você ainda precisa ter nomes como sandwiches_tunaOnRye mas você vai ser capaz de ter uma seção separada para todos os seus sanduíches.

Isso permite que você armazene seus recursos em diferentes estruturas (útil para auto gerado conteúdo, como actionbargenerator)

Uma maneira de obter parcialmente em torno do problema é usar o sufixo API Nível. Eu uso res / layout-v1, res / layout-v2 etc para realizar vários projetos sub no mesmo apk. Este mecanismo pode ser usado para todos os tipos de recursos.

Obviamente, isso só pode ser usado se você está direcionando níveis de API acima da res / layout-v? você está usando.

Além disso, atente para o bug no Android 1.5 e 1.6. Veja Andoroid sobre a API Nível sufixo .

Com o advento do sistema de bibliotecas, criação de uma biblioteca por grande conjunto de ativos pode ser uma solução.

Ainda é problemático, pois deve-se evitar usar os mesmos nomes dentro de todos os ativos, mas usando um esquema de prefixo per biblioteca deve ajudar com isso.

Não é tão simples como ser capaz de criar pastas, mas que ajuda a manter as coisas sã ...

Existe uma solução para esta situação: você pode criar um resVector (por exemplo) pasta no mesmo nível pasta res padrão. Lá você pode adicionar todas as pastas de recursos drawable-xxx lá:

resVector
-drawable
-layout
-color

Depois que tudo que você precisa é adicionar

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

em seu arquivo build.gradle (android { } dentro).

Este não é métodos perfeitos. Você tem que implementar mesma forma que é exibição aqui .

Você também pode chamar a imagem na pasta por meio do código que você pode usar

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

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

Não é meu, mas eu achei esta discussão quando se olha para esta questão, se o seu usando Estúdio Android e sistema de compilação Gradle sua muito fácil sem plugins necessários apenas um pouco arquivo de construção edição

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

Gradle com Android Estúdio poderia fazê-lo desta forma ( link ).

É no parágrafo "Configurar a Estrutura"

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

criar uma pasta no principal. como: 'res_notification_btn'

e criar pasta árvore no. Como 'drawable' ou 'disposição'

, em seguida, em 'build.gradle' adicionar este

sourceSets
            {
                main
                {
                    res
                    {
                        srcDirs = ['src/main/res_notification_btn', 'src/main/res']
                      or
                        srcDir 'src/main/res_notification_btn'
                    }
                }
            }
#!/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?("/")
}

Verifique Bash Flatten pasta roteiro que converte pasta hierarquia para uma única pasta

assets / Você pode usá-lo para armazenar arquivos de recursos brutos. Os arquivos que você salvar aqui são compilados em um arquivo .apk como está, e o nome do arquivo original é preservado. Você pode navegar este diretório da mesma forma como 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 do jogo. http://developer.android.com/tools/projects/index.html

Os subdiretórios não são permitidos, o recurso deve conter apenas [a-Z0-9 _.].

Não, você tem letras maiúsculas, e não barras.

  1. clique direito do mouse sobre Drawable
  2. Selecione Novo ---> Diretório
  3. Digite o nome do diretório. Por exemplo: logo.png (o local já vai mostrar a pasta drawable por padrão)
  4. Copiar e colar as imagens directamente para a pasta drawable. Enquanto colando você começa a opção de escolher mdpi / xhdpi / xxhdpi etc para cada uma das imagens de uma lista. Selecione a opção apropriada e insira o nome da imagem. Certifique-se manter o mesmo nome que o nome do diretório ou seja logo.png
  5. Faça o mesmo para as restantes imagens. Todos eles serão colocados na pasta principal logo.png.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top