629 votes

Le dossier Android mise en page peut contenir des sous-dossiers ?

Maintenant, je stocke chaque xml fichier de mise en page à l'intérieur de la mise en page de dossier, de sorte qu'il est possible et simple à gérer de petits projets, mais quand il s'agit d'un cas de gros et les gros projets, puis il devrait y avoir une hiérarchie et des sous-dossiers à l'intérieur de la mise en page du dossier.

par exemple

layout
-- layout_personal
   -- personal_detail.xml
   -- personal_other.xml
--layout_address
  -- address1.xml
  -- address2.xml

Comme de la même manière, nous aimerions avoir des sous-dossiers pour la grande application, donc est-il possible de le faire à l'intérieur du projet android?

Je suis en mesure de créer la mise en page personnelle et layout_address sous-dossiers à l'intérieur de la mise en page du dossier, mais quand vient le temps pour accéder au fichier xml fichier de mise en page à l'aide de R. layout._ à ce moment il y a aucune mise en page xml de pop-up à l'intérieur du menu.

521voto

eski Points 1360

Vous POUVEZ faire cela avec gradle. J'ai fait un projet de démonstration en montrant comment à: https://github.com/eskimoapps/ResourceNestingExample.

L'astuce est d'utiliser gradle la capacité de fusionner plusieurs dossiers de ressources, et de définir le dossier res ainsi que les sous-dossiers imbriqués dans le sourceSets bloc.

La bizarrerie est que vous ne pouvez pas déclarer un conteneur de ressources dossier avant de vous déclarer que le dossier de l'enfant de dossiers de ressources.

Ci-dessous est la sourceSets pâté de maisons de la construire.gradle fichier de la démo. Notez que les sous-dossiers sont déclarés en premier.

sourceSets {
    main {
        res.srcDirs =
        [
                'src/main/res/layouts/layouts_category2',
                'src/main/res/layouts',
                'src/main/res'
        ]
    }
}

nested resources picture

247voto

100rabh Points 4057

La réponse est non.

Je voudrais attirer votre attention sur ce livre Pro Android 2 qui stipule:

Il est également intéressant de noter que quelques-uns les contraintes concernant les ressources. Tout d'abord, Android prend en charge uniquement un linéaire liste des fichiers au sein de l'prédéfini dossiers en vertu de la res. Par exemple, il ne prend pas en charge les dossiers imbriqués sous la mise en page de dossier (ou de l'autre les dossiers, sous res).

Deuxièmement, il y a quelques similitudes entre l'actif et le dossier de raw dossier sous la res. Les deux dossiers peuvent contenir des fichiers raw, mais les fichiers dans les premières sont considérées comme des ressources et les fichiers dans les actifs ne sont pas.

Notez que parce que le contenu de la les actifs de dossier ne sont pas considérés comme ressources, vous pouvez mettre un arbitraire hiérarchie de dossiers et de fichiers dans c'.

57voto

delformo Points 613

Pas possible, mais le dossier de mise en page est trié par nom. Donc, je préfixer les noms de fichiers de mise en page avec mes noms de paquets. Par exemple pour les deux forfaits "achat" et "jeu":

 buying_bought_tracks.xml
buying_buy_tracks.xml
playing_edit_playlist.xml
playing_play_playlist.xml
playing_show_playlists.xml
 

20voto

botbot Points 1948

Je pense que la solution la plus élégante à ce problème (étant donné que les sous-dossiers ne sont pas permis) est de préfixer les noms de fichiers avec le nom du dossier que vous auriez placé à l'intérieur de. Par exemple, si vous avez un tas de mises en page pour une Activité, d'un Fragment, ou tout simplement la vue générale appelée les "lieux", alors vous devriez vous suffit de le préfixer avec places_my_layout_name. Au moins cela résout le problème de l'organisation de manière à ce qu'ils soient plus faciles à trouver dans l'IDE. Ce n'est pas la plus impressionnante de la solution, mais c'est mieux que rien.

18voto

Exception Al Points 3432

Maintenant, avec Android Studio et Gradle, vous pouvez avoir plusieurs dossiers de ressources dans votre projet. Permettre 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:

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

Vérifiez la documentation .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X