Dans la documentation Android SDK, tous les exemples utilisés avec la syntaxe @ drawable / my_image xml concernent directement les images stockées dans le répertoire res / drawable de mon projet.
Je me demande si ce n'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 suivante:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
Puis-je référencer l'image d'un sandwich à la salade de thon comme @ drawable / sandwiches / tunaOnRye
Ou dois-je garder la hiérarchie plate dans le répertoire drawable.
android
drawable
android-resources
Poivre Lebeck-Jobe
la source
la source
Réponses:
Non, le mécanisme des ressources ne prend pas en charge les sous-dossiers dans le répertoire drawable, donc oui - vous devez garder cette hiérarchie plate.
La disposition du répertoire que vous avez montrée n'entraînerait aucune image disponible.
D'après mes propres expériences, il semble que le fait d'avoir un sous-dossier contenant des éléments, dans le
res/drawable
dossier, entraînera l'échec du compilateur de ressources, empêchant leR.java
fichier d'être généré correctement.la source
La solution de contournement que j'utilise (et celle qu'Android lui-même semble favoriser) consiste essentiellement à substituer un trait de soulignement à une barre oblique, de sorte que votre structure ressemblerait à quelque chose comme ceci:
L'approche nécessite que vous soyez méticuleux dans votre dénomination et ne facilite pas beaucoup la manipulation des fichiers eux-mêmes (si vous décidiez que les boissons et les sandwichs devraient vraiment tous être "
food
", vous devriez faire un renommage de masse plutôt que simplement les déplacer vers le répertoire); mais la complexité de votre logique de programmation ne souffre pas trop mal par rapport à l'équivalent de la structure des dossiers.Cette situation est vraiment nulle. Android est un mélange de décisions de conception merveilleuses et terribles. Nous ne pouvons qu'espérer que la dernière portion sera éliminée avec toute la hâte due :)
la source
En fait, sur Android Studio, c'est possible. Vous pouvez avoir des ressources imbriquées comme indiqué ici :
Il existe également un plugin pour regrouper les ressources ici .
la source
Oui - ça craint :) Cependant, vous pouvez utiliser le dossier assets et y avoir des sous-répertoires et charger des images de cette façon.
la source
Utilisez le dossier des ressources.
exemple de code:
la source
J'ai écrit un plugin eclipse qui permet de créer un sous-dossier virtuel en séparant le nom du fichier par deux traits de soulignement
__
. Le projet est à ses débuts, mais ne vous inquiétez pas, il ne plantera pas votre IDEplus de détails peuvent être trouvés ici, n'hésitez pas à bifurquer et envoyer des demandes de pull:
https://github.com/kirill578/Android-Sorted-Res-Folder
la source
J'aime utiliser un script simple pour aplatir une structure de répertoires organisée fournie par les concepteurs à quelque chose qui peut être utilisé pour générer un fichier R.
Exécuter avec le chemin actuel dans drawable-hdpi:
la source
Dans le studio Android avec gradle, vous pouvez avoir plusieurs directeurs de source qui vous permettront de séparer les ressources. Par exemple:
Cependant, les noms ne doivent pas entrer en collision, ce qui signifie que vous devrez toujours avoir des noms tels que sandwiches_tunaOnRye, mais vous pourrez avoir une section distincte pour tous vos sandwichs.
Cela vous permet de stocker vos ressources dans différentes structures (utiles pour le contenu généré automatiquement tel que actionbargenerator)
la source
Une façon de contourner partiellement le problème consiste à utiliser le suffixe de niveau API. 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é que si vous ciblez des niveaux d'API supérieurs à res / layout-v? vous utilisez.
Faites également attention au bogue dans Android 1.5 et 1.6. Voir la documentation d'Andoroid sur le suffixe de niveau API .
la source
Avec l'avènement du système de bibliothèque, la création d'une bibliothèque par grand ensemble d'actifs pourrait être une solution.
C'est toujours problématique car il faut éviter d'utiliser les mêmes noms dans tous les actifs, mais l'utilisation d'un schéma de préfixe par bibliothèque devrait aider à cela.
Ce n'est pas aussi simple que de pouvoir créer des dossiers, mais cela aide à garder les choses saines d'esprit ...
la source
Il existe une solution de contournement à cette situation: vous pouvez créer un
resVector
dossier (par exemple) au même niveau que leres
dossier par défaut . Vous pouvez y ajouter n'importe queldrawable-xxx
dossier de ressources:Après cela, il vous suffit d'ajouter
dans votre
build.gradle
dossier (à l'intérieurandroid { }
).la source
Ce ne sont pas des méthodes parfaites. Vous devez implémenter la même manière qui est affichée ici .
Vous pouvez également appeler l'image sous le dossier via le code que vous pouvez utiliser
la source
Pas le mien mais j'ai trouvé ce fil lors de la recherche de ce problème, si vous utilisez le système Android Studio et Gradle Build, c'est assez facile, aucun plugin nécessaire juste un peu d'édition du fichier de construction
https://stackoverflow.com/a/22426467/618419
la source
Gradle avec Android Studio pourrait le faire de cette façon ( lien ).
C'est dans le paragraphe "Configuration de la structure"
la source
créer un dossier dans main. comme: 'res_notification_btn'
et créer un dossier d'arborescence dans. comme «dessinable» ou «mise en page»
puis dans 'build.gradle' ajoutez ceci
la source
la source
Vérifier le script Bash Flatten Folder qui convertit la hiérarchie des dossiers en un seul dossier
la source
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 tel quel et le nom de fichier d'origine est conservé. Vous pouvez parcourir ce répertoire de la même manière qu'un système de fichiers classique à l'aide d'URI et lire des fichiers sous forme de flux d'octets à l'aide de AssetManager. Par exemple, c'est un bon emplacement pour les textures et les données de jeu. http://developer.android.com/tools/projects/index.html
la source
Les sous-répertoires ne sont pas autorisés, la ressource ne doit contenir que [a-z0-9_.].
Non, vous avez des lettres majuscules et aucune barre oblique.
la source
la source