Question

Dans la documentation SDK Android, tous les exemples utilisés avec le @ drawable / mon_image syntaxe XML portent directement sur les images qui sont stockées dans le res / répertoire drawable dans mon projet.

Je me demande si elle est explicitement pas correct de créer un sous-répertoire dans le répertoire drawable.

Par exemple, si j'avais la disposition du répertoire suivant:

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

Puis-je faire référence à l'image d'un sandwich salade de thon @ étirables / sandwiches / tunaOnRye

Ou dois-je garder la hiérarchie plate dans le répertoire drawable.

Était-ce utile?

La solution

Non, le mécanisme des ressources ne supporte pas les sous-dossiers dans le répertoire drawable, donc oui -. Vous devez garder cette hiérarchie plate

La mise en page du répertoire que vous montriez entraînerait aucune des images étant disponibles.

De mes propres expériences, il semble que d'avoir un sous-dossier avec tous les éléments qu'il contient, dans le dossier res/drawable, provoquera le compilateur de ressources à l'échec -. Empêchant le fichier généré à partir R.java correctement

Autres conseils

La solution J'utilise (et une Android lui-même semble favoriser) est de remplacer essentiellement un trait de soulignement pour une barre oblique, de sorte que la structure ressemblerait à quelque chose comme ceci:

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

L'approche vous oblige à être méticuleux dans votre dénomination et ne rend pas beaucoup plus facile de se quereller les fichiers eux-mêmes (si vous avez décidé que les boissons et les sandwichs devraient vraiment tout être « food », vous auriez à faire une masse renomme plutôt que de simplement les déplacer dans le répertoire); mais votre complexité de la logique de programmation ne souffre pas aussi mal par rapport à la structure du dossier équivalent.

Cette situation est nul effet. Android est un mélange de décisions de conception merveilleuses et terribles. Nous ne pouvons qu'espérer que la dernière partie pour se désherbé avec toute la célérité voulue:)

Oui -. Il ne sucent :) Cependant, vous pouvez utiliser le dossier actif et ont des sous-répertoires là-bas et charger des images de cette façon

En fait, sur Android studio, il est possible. Vous pouvez avoir des ressources imbriquées comme le montre ici :

 ici

Il y a aussi un plugin pour les ressources du groupe ici .

Utiliser le dossier actif.

exemple de code:

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

image = BitmapFactory.decodeStream(is);

Je l'ai écrit un plugin Eclipse qui permet de créer des sous-dossier virtuel en séparant le nom du fichier avec deux underscores __. Le projet est à un stade précoce, mais ne vous inquiétez pas il ne sera pas planter votre IDE

plus de détails peuvent être trouvés ici, ne hésitez pas à la fourchette et d'envoyer des demandes de traction:

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

entrer image description ici

J'aime utiliser un script simple pour aplatir une structure de répertoire organisé fourni par les concepteurs à quelque chose qui peut être utilisé pour générer un fichier R.

Exécuter avec le chemin courant dans 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

En studio avec Android gradle vous pouvez avoir plusieurs directeurs de sources qui vous permettront de séparer les ressources. Par exemple:

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

Toutefois, les noms ne doivent pas entrer en collision qui signifie que vous devez toujours avoir des noms tels que sandwiches_tunaOnRye mais vous serez en mesure d'avoir une section séparée pour tous vos sandwichs.

Cela vous permet de stocker vos ressources dans différentes structures (utiles pour le contenu généré automatiquement par exemple actionbargenerator)

Une façon d'obtenir partiellement autour du problème est d'utiliser le suffixe API de niveau. J'utilise res / layout-v1, res / layout-v2 etc pour contenir plusieurs sous-projets dans le même apk. Ce mécanisme peut être utilisé pour tous les types de ressources.

De toute évidence, cela ne peut être utilisée que si vous ciblez les niveaux de l'API au-dessus du res / layout-v? vous utilisez.

En outre, attention au bug dans Android 1.5 et 1.6. Voir la documentation Andoroid sur le suffixe API de niveau .

Avec l'avènement du système de bibliothèque, ce qui crée une bibliothèque par grand ensemble d'actifs pourrait être une solution.

Il est toujours problématique, car il faut éviter d'utiliser le même nom au sein de tous les actifs, mais en utilisant un système de préfixe par bibliothèque devrait aider.

Il est pas aussi simple que d'être en mesure de créer des dossiers, mais qui aide à garder les choses sain d'esprit ...

Il existe une solution pour cette situation: vous pouvez créer un dossier resVector (par exemple) sur le même niveau que le dossier par défaut res. Vous pouvez y ajouter des dossiers il y a des ressources drawable-xxx:

resVector
-drawable
-layout
-color

Après que tout ce que vous avez besoin est d'ajouter

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

dans votre fichier build.gradle (intérieur android { }).

Gradle avec Android Studio pourraient le faire de cette façon ( lien ).

Il est dans le paragraphe "Configuration de la structure"

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

créer un dossier dans le principal.  comme: 'res_notification_btn'

et créer un dossier d'arbre. Comme Drawable ou 'layout'

puis dans 'build.gradle' ajouter cette

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?("/")
}

Vérifier Bash Aplatir dossier de script de qui convertit la hiérarchie de dossiers dans un seul dossier

actifs /     Vous pouvez l'utiliser pour stocker des fichiers d'actifs bruts. Les fichiers que vous enregistrez ici sont compilés dans un fichier .apk en l'état, et le nom du fichier d'origine est conservé. Vous pouvez naviguer dans ce répertoire de la même manière comme un système de fichiers en utilisant typique URIs et lire les fichiers comme un flux d'octets en utilisant le AssetManager. Par exemple, c'est un bon endroit pour les textures et les données de jeu. http://developer.android.com/tools/projects/index.html

Sous-répertoires ne sont pas autorisés, la ressource ne doit contenir que [a-z0-9 _.].

Non, vous avez des lettres majuscules, et pas des barres obliques.

  1. Faites un clic droit sur Drawable
  2. Sélectionnez Nouveau ---> Répertoire
  3. Saisissez le nom du répertoire. Par exemple: logo.png (l'emplacement affichera déjà le dossier drawable par défaut)
  4. Copiez et collez les images directement dans le dossier drawable. Alors que vous obtenez coller une option pour choisir mdpi / xhdpi / etc xxhdpi pour chacune des images d'une liste. Sélectionnez l'option appropriée et entrez le nom de l'image. Assurez-vous de garder le même nom que le nom du répertoire i.e. logo.png
  5. Faites la même chose pour les images restantes. Chacun d'entre eux seront placés dans le dossier principal logo.png.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top