En ce moment, je stocke tous les fichiers de mise en page XML dans le res/layout
dossier, il est donc possible et simple de gérer de petits projets, mais lorsqu'il y a un cas de projets volumineux et lourds, il devrait y avoir une hiérarchie et des sous-dossiers nécessaires à l'intérieur le dossier de mise en page.
par exemple
layout
-- layout_personal
-- personal_detail.xml
-- personal_other.xml
--layout_address
-- address1.xml
-- address2.xml
De la même manière, nous aimerions avoir des sous-dossiers pour la grande application, alors y a-t-il un moyen de le faire dans le projet Android?
Je peux créer des sous-dossiers layout-personal et layout_address dans le dossier layout, mais quand vient le temps d'accéder au fichier de mise en page xml à l'aide de R.layout ._______, à ce moment-là, il n'y a pas de pop-up de mise en page xml à l'intérieur du menu.
android
android-layout
Paresh Mayani
la source
la source
Réponses:
Vous pouvez le faire avec gradle. J'ai fait un projet de démonstration montrant comment.
L'astuce consiste à utiliser la capacité de gradle à fusionner plusieurs dossiers de ressources et à définir le dossier res ainsi que les sous-dossiers imbriqués dans le bloc sourceSets.
L'originalité est que vous ne pouvez pas déclarer un dossier de ressources de conteneur avant de déclarer les dossiers de ressources enfants de ce dossier.
Ci-dessous se trouve le bloc sourceSets du fichier build.gradle de la démo. Notez que les sous-dossiers sont déclarés en premier.
De plus, le parent direct de vos fichiers de ressources réels (pngs, dispositions xml, etc.) doit toujours correspondre à la spécification .
la source
R.layout.list_item
provient dumovies
ou ducinemas
dossier, donc la dénomination plate s'applique toujours.build:gradle:0.14.4
etbuildToolsVersion "21.1.1"
.URI is not registered
problème.La réponse est non.
Je voudrais attirer votre attention sur ce livre Pro Android 2 qui dit:
la source
raw
comme des ressources, vous obtenez une répartition dépendante de la densité / orientation / version / etc, alors queassets
vous devez le faire manuellement.Je voulais juste ajouter une réponse fantastique aux eskis pour les personnes en difficulté. (Remarque: cela ne fonctionnera et ne ressemblera qu'à des répertoires séparés dans la vue «projet», pas malheureusement la vue «android».)
Testé avec ce qui suit. BuildToolsVersion = 23.0.0 gradle 1.2.3 & 1.3.0
C'est ainsi que j'ai fait travailler le mien avec un projet déjà construit.
Une fois cela terminé, allez dans le fichier gradle.build de vos modules et créez une définition sourceSets comme celle-ci ... (Assurez-vous que 'src / main / res / layouts' et 'src / main / res' sont toujours les deux derniers !!) !! Comme je le montre ci-dessous).
Bénéfice $$$$
Mais sérieusement .. c'est ainsi que je l'ai fait fonctionner. Faites-moi savoir si quelqu'un a des questions .. Je peux essayer de vous aider.
Les images valent plus que les mots.
la source
layout-v21
?'src/main/res/layouts/content'
et le chemin de cette configuration est'src/main/res/layouts/content/layout'
Pas possible, mais le dossier de disposition est trié par nom. Donc, je ajoute les noms des fichiers de mise en page avec les noms de mes packages. Par exemple, pour les deux packages "acheter" et "jouer":
la source
J'utilise le plugin Android File Grouping pour Android Studio.Il ne vous permet pas vraiment de créer des sous-dossiers, mais il peut AFFICHER vos fichiers et ressources TELS qu'ils se trouvent dans différents dossiers. Et c'est exactement ce que je voulais.
Vous pouvez installer le plugin "Android File Grouping" en
Les fenêtres:
Mac:
Pour Mac, j'ai pu le tester et n'ai pas pu rechercher le plugin. J'ai donc téléchargé le plugin ici et utilisé l'
Install plugin from disk
option du paramètre ci-dessus.la source
Désormais, avec Android Studio et Gradle, vous pouvez avoir plusieurs dossiers de ressources dans votre projet. Permet d'organiser non seulement vos fichiers de mise en page, mais tout type de ressources.
Ce n'est pas exactement un sous-dossier, mais peut séparer des parties de votre application.
La configuration est comme ceci:
Consultez la documentation .
la source
clean
pour le voir reflété sur l'application.Je pense que la solution la plus élégante à ce problème (étant donné que les sous-dossiers ne sont pas autorisés) consiste à ajouter les noms de fichier au nom du dossier dans lequel vous l'auriez placé. Par exemple, si vous avez un tas de mises en page pour une activité, un fragment ou simplement une vue générale appelée "lieux", vous devez simplement la ajouter avec places_my_layout_name. Au moins, cela résout le problème de les organiser d'une manière plus facile à trouver dans l'IDE. Ce n'est pas la solution la plus impressionnante, mais c'est mieux que rien.
la source
Petit problème
Je suis en mesure d'obtenir des sous-dossiers en suivant la première réponse à cette question.
Cependant, à mesure que le projet s'agrandit, vous aurez de nombreux sous-dossiers:
Pas un gros problème, mais:
app/build.gradle
chaque fois que vous ajoutez un nouveau dossier.Amélioration
J'ai donc écrit une méthode Groovy simple pour récupérer tous les dossiers imbriqués:
Collez cette méthode en dehors du
android {...}
bloc dans votreapp/build.gradle
.Comment utiliser
Pour une structure comme celle-ci:
Utilisez-le comme ceci:
Si vous avez une structure comme celle-ci:
Vous l'utiliserez comme ceci:
Explication
getLayoutList()
prenda relative path
comme argument. Lerelative path
est relatif à la racine du projet. Ainsi, lorsque nous"app/src/main/res/layouts/"
entrerons, il renverra le nom de tous les sous-dossiers sous forme de tableau, qui sera exactement le même que:Voici le script avec des commentaires pour comprendre:
J'espère que cela aide!
la source
setContentView(R.layout.Admin.admin_home .)
Admin.admin_home n'est pas résoluR.layout.admin_home
. Le script devrait être en mesure de récupérer automatiquement les noms pour vous. Faites-moi savoir si vous pouvez le faire fonctionner.array.push("src/main/res");
endef res="src/main/res";
array.push(res);
parce que j'ai une erreur car push veut que le paramètre Gstring ne soit pas une chaîne .si quelqu'un plutôt que moi a trouvé cette erreur, vous pouvez la modifier// uncomment for debugging
puis vérifier si les sortiessrc/main/res/layouts/<your_layout_files>
sont correctement détectées?Maintenant, nous pouvons facilement le faire avec le plugin JetBrains appelé " Android File Grouping "
consultez ce lien
Regroupement de fichiers Android
la source
Android Studio
Une façon de le faire était de créer un dossier res séparé au même niveau que le dossier res réel dans votre projet, puis vous pouvez l'utiliser dans vos applications build.gradle
alors chaque sous-dossier de votre nouveau dossier res peut être quelque chose en rapport avec chaque écran particulier ou quelque chose dans votre application, et chaque dossier aura son propre
layout
/drawable
/values
etc garder les choses organisées et vous n'avez pas à mettre à jour le fichier gradle manuellement comme certains de ces autres les réponses nécessitent (synchronisez simplement votre gradle chaque fois que vous ajoutez un nouveau dossier de ressources pour qu'il en soit informé et assurez-vous d'ajouter les sous-dossiers appropriés avant d'ajouter vos fichiers xml).la source
Vérifier le script Bash Flatten Folder qui convertit la hiérarchie des dossiers en un seul dossier
la source
Si vous développez sur un linux ou une boîte mac, une solution de contournement serait de créer des sous-dossiers qui incluent des liens symboliques vers vos fichiers de mise en page. Utilisez simplement la commande ln avec -s
Le problème est que votre dossier de mise en page contient toujours tous les fichiers .xml. Mais vous pouvez les sélectionner en utilisant les sous-dossiers. C'est ce qui se rapproche le plus de ce que vous aimeriez avoir.
Je viens de lire que cela pourrait également fonctionner avec Windows si vous utilisez Vista ou une version ultérieure. Il y a ceci
mklink
commande. Il suffit de google, je ne l'ai jamais utilisé moi-même.Un autre problème est que si vous avez ouvert le fichier et essayez de l'ouvrir à nouveau, le plugin lève une exception de pointeur NULL. Mais ça ne raccroche pas.
la source
Bien que toutes les propositions pour plusieurs jeux de ressources puissent fonctionner, le problème est que la logique actuelle du plug-in Android Studio Gradle ne mettra pas à jour les fichiers de ressources après leur modification pour les jeux de ressources imbriqués. L'implémentation actuelle tente de vérifier les répertoires de ressources à l'aide de startsWith (), donc une structure de répertoires imbriquée (c'est-à-dire src / main / res / layout / layouts et src / main / res / layout / layouts_category2) choisira src / main / res / layout / layouts de manière cohérente et ne met jamais à jour les modifications. Le résultat final est que vous devez reconstruire / nettoyer le projet à chaque fois.
J'ai soumis un patch à https://android-review.googlesource.com/#/c/157971/ pour essayer d'aider à résoudre les choses.
la source
La meilleure réponse de @eski est bonne, mais le code n'est pas élégant à utiliser, j'ai donc écrit un script groovy en gradle pour une utilisation générale. Il est appliqué à tous les types de construction et à tous les produits et peut non seulement être utilisé pour la mise en page, mais vous pouvez également ajouter un sous-dossier pour tout autre type de ressources, tel que drawable. Voici le code (mettez-le dans un
android
bloc de fichier gradle au niveau du projet):Comment faire en pratique?
Par exemple, je veux créer un sous-dossier nommé
activity
pourlayout
, ajouter une chaîne par n'importe quel nom dans uneresDirs
variable telle quelayouts
, puis le fichier xml de mise en page doit être placé dansres\layouts\activity\layout\xxx.xml
.Si je veux créer un sous-dossier nommé
selectors
pourdrawable
, ajouter une chaîne par n'importe quel nom dans uneresDirs
variable telle quedrawables
, alors le fichier xml dessinable doit être placéres\drawables\selectors\drawable\xxx.xml
.Le nom du dossier tel que
layouts
etdrawables
est défini enresDirs
variable, il peut s'agir de n'importe quelle chaîne. Tous les sous-dossiers créés par vous tels queactivity
ouselectors
sont considérés comme identiques aures
dossier. Donc, dans leselectors
dossier, nous devons créer undrawable
dossier en plus et mettre les fichiers xml dans ledrawable
dossier, après que gradle puisse reconnaître les fichiers xml comme dessinables normalement.la source
Si vous utilisez la méthode dans la réponse approuvée et que vous souhaitez l'améliorer un peu, modifiez le paramètre Gradle comme suit:
Donc, si vous ajoutez plus de dossiers et de mises en page, vous n'avez pas besoin de revenir ici et d'ajouter une longue liste de dossiers source, laissez gradle obtenir tous les dossiers pour vous.
la source
la source
Project
mode. Je ne pouvais pas comprendre où les sous-dossiers avaient disparu (enAndroid
mode).Eh bien, la réponse courte est non. Mais vous pouvez certainement avoir plusieurs
res
dossiers. Je pense que c'est aussi proche que possible d'avoir des sous-dossiers pour lelayout
dossier. Voici comment procéder.la source
Les meilleures réponses présentent plusieurs inconvénients: vous devez ajouter de nouveaux chemins de mise en page, AS place de nouvelles ressources dans le
res\layouts
dossier au lieu deres\values
.En combinant plusieurs réponses, j'ai écrit des choses similaires:
J'ai créé des dossiers avec cet article: http://alexzh.com/tutorials/how-to-store-layouts-in-different-folders-in-android-project/ . Pour créer des sous-dossiers, vous devez utiliser ce menu: Nouveau> Dossier> Dossier Res.
MISE À JOUR
Après quelques semaines, j'ai constaté que les changements de ressources ne sont pas remarqués par Android Studio . Ainsi, quelques bugs étranges apparaissent. Par exemple, les mises en page continuent d'afficher d'anciennes tailles et marges. Parfois, AS ne trouve pas de nouveaux fichiers XML (en particulier lors de l'exécution). Parfois, il mélange des
view id
s (références à un autre fichier XML). Il est souvent nécessaire d'appuyer surBuild > Clean Project
ouBuild > Rebuild Project
. Lire Reconstruire requis après avoir modifié les fichiers de disposition xml dans Android Studio .la source
res
dossier traditionnel , car AS ne prend pas entièrement en charge la division des ressources en dossiers. Je vais probablement changer cette réponse ou même la supprimer. Mais que voulez-vous dire quand vous dites que ce n'est pas un moyen acceptable de fournir des solutions ici sur SO?Ne peut pas avoir de sous-répertoires (facilement) mais vous pouvez avoir des dossiers de ressources supplémentaires . Surpris, personne ne l'a déjà mentionné, mais pour conserver les dossiers de ressources par défaut et en ajouter d'autres:
la source