0

Je travaille sur une application vraiment désordonnée et la première fois avec des saveurs. App a comme 4,5 saveurs tous avec des couleurs de fond identiques, drawables, etc. Seul le logo est différent.Comment modifier automatiquement les tiroirs en fonction d'une saveur?

Maintenant, je dois faire une nouvelle saveur avec une mise en page complètement différente. La couleur d'arrière-plan doit être jaune au lieu de grise et les images pouvant être dessinées doivent être en noir plutôt qu'en blanc. Le problème est, j'ai comme 100 images blanches différentes. Est-il possible que je puisse les changer en noir automatiquement? (le concepteur peut les redessiner ou n'importe quoi pour être noir et je peux les mettre dans le dossier drawable de cette saveur) Ou je devrais vérifier par programmation si la nouvelle saveur est utilisée alors appelez setDrawable (newBlackImage) sur chaque widget qui utilise le drawable blanc? Cela semble être une façon très compliquée de faire puisque tous les drawables sont mis en page XML.

La façon dont ils ont utilisé les arômes était de créer un fichier booléen de ressources et de vérifier le code si une clé a la valeur vrai/faux alors cacher/montrer certaines choses ... Donc je suppose que je devrais faire quelque chose de similaire avec ça, ou non?

C'est ce que la structure du projet pour un de mes goûts ressemble à:

enter image description here

Comme vous pouvez le voir, chaque saveur a seulement différentes icônes écran lanceur et de connexion. Chacun a aussi ses propres fichiers de ressources de tableaux, de binaires et de chaînes. Mais tous partagent les mêmes ressources de mise en page et les drawables avec des icônes blanches.

+0

Si vous utilisez des ressources VectorDrawables au lieu d'images, ils peuvent être teintés par programmation sans utiliser des fichiers différents. –

+0

Malheureusement, tous sont des ressources d'image:/Designer m'a dit qu'il peut m'envoyer les noirs, donc ce n'est pas un problème. Le problème principal est, j'ai une mise en page qui définit le src pour imageview comme l'une des icônes blanches. Je veux juste éviter de le changer en noir par programme – joe

Répondre

2

Je pense que vous êtes déjà dans la bonne direction. En créant des saveurs spécifiques pour chaque groupe de drawable dans votre fichier gradle, vous aurez juste besoin de créer un dossier drawable pour les saveurs avec des fichiers spécifiques. Par exemple, la saveur «noir» nécessitera un dossier pouvant être tracé dans lequel toutes vos images de fond noir seront stockées. Pour que cela fonctionne, toutes les ressources doivent exister pour toutes les versions, vous n'avez donc pas besoin de modifier une partie de votre code.

Vous pouvez trouver un guide rapide ici: https://medium.com/@thiagolopessilva/the-handling-multiple-java-source-and-resources-using-flavors-on-gradle-18a4b581285b

+0

C'est un bon article, tnx man! Maintenant, je comprends mieux alors j'ai mis à jour ma question afin que vous puissiez voir si ma structure de projet est fausse. Peut-être que le problème est que toutes mes icônes blanches sont à l'intérieur du dossier principal drawable et toutes les mises en page sont dans le dossier de mise en page principale .. chaque saveur n'a que l'icône du lanceur différent. Donc, si je change quelque chose dans une mise en page, toutes les saveurs auront ce changement. Si je vous ai bien compris, cette structure de saveur que je vous ai montrée ci-dessus, devrait avoir un dossier dessinable avec des icônes noires, non? Mais alors il faudrait aussi avoir toutes les dispositions pour assigner ces icônes? – joe

+0

Peut-être puisque toutes les saveurs utilisent les mêmes dispositions, je peux créer mettre toutes les icônes noires à l'intérieur de ce dossier dessinable de saveur et les nommer comme le blanc? Donc, la disposition aura ImageView avec android: src = "@ drawable/ic_add_white_24dp" champ, donc si ma saveur a ic_add_white_24dp à l'intérieur de son drawable (mais il sera noir), il utilisera celui-là .. – joe

+0

C'est correct. Les ressources dans 'main' sont votre ligne de base, toutes les ressources dans les dossiers de saveur avec le même chemin/nom les remplaceront dans l'application. –