web-dev-qa-db-fra.com

Versions plus récentes de Android Studio et seulement deux répertoires dessinables - drawable et drawable-v21

Avec les anciennes versions de Android Studio, tous les dossiers de compartiment pouvant être dessinés ont été créés par défaut (c'est-à-dire drawable-mdpi, drawable-hdpi, etc.). Dans les versions plus récentes de Android Studio, il ne fournit que drawable et drawable-v21. Pourquoi?

Y a-t-il une raison pour laquelle Android (dans sa sagesse infinie) ne vous donne plus les dossiers de compartiment séparés?

Juste pour noter, je sais que vous pouvez simplement les ajouter manuellement, mais je veux m'assurer qu'il n'y a pas de nouvelle raison de ne pas utiliser ces dossiers.

29
Bourne

Merci à tous ceux qui ont essayé d'aider. Vous m'avez aidé à atteindre la réponse finale, mais aucune solution n'était tout à fait correcte. @ user3137702 était probablement le plus proche, car il [IS était lié au passage complet aux vecteurs/SVG. Je n'ai pas pu trouver de réponse définitive, comme quelque chose directement de Google (même si j'imagine que c'est là-bas), mais d'après ce que j'ai rassemblé à partir d'un tas d'articles, il y a probablement une raison pour laquelle ils le font.

Pour commencer, cela ressemble à ceci commencé dans Android Studio 1.4. Je suis en 1.5 en ce moment. Il semble que Android se déplace dans le sens de ne plus avoir besoin de vous pour créer vos propres dossiers de densité (c'est-à-dire mdpi, hdpi, etc.) pour les dessinables (les mipmaps sont différents, donc s'il vous plaît ne confondez pas cela avec de quoi je parle). À partir de Android Studio 1.4, il prendra les SVG que vous placez dans le dossier dessinable normal (comme dans le dossier non v21), les convertira en PNG et les placera dans des dossiers de densité générés automatiquement pour vous pendant la séquence de construction (donc Gradle le fait pour vous, essentiellement) pour toutes les versions antérieures à l'API 21. Pour les versions 21 et supérieures, SVG est pris en charge différemment, ce qui est un tout autre sujet. Mais cela rend essentiellement le support SVG rétrocompatible jusqu'à l'API 1 !!!

CEPENDANT, il y a un GRAND crochet. Cette conversion SVG n'est pas toujours aussi réussie que vous pourriez l'espérer. Il ne prend en charge qu'un sous-ensemble de fichiers SVG, donc selon la façon dont vous l'enregistrez (c'est-à-dire quels paramètres sont appliqués lors de l'enregistrement), il peut ne pas s'afficher correctement. Même les paramètres couramment utilisés, tels que les remplissages de dégradé et de motif, les références IRI locales et les transformations ne sont PAS (encore) pris en charge. Si vous travaillez avec des fichiers SVG que vous n'avez pas générés, vous aurez probablement des problèmes pour les importer. Si vous ou quelqu'un avec qui vous travaillez les génère directement, vous devrez peut-être expérimenter la façon dont vous enregistrez les fichiers, et vous devriez souvent tester les versions sur les anciennes versions de Android pour vous assurer qu'elles se sont déroulées comme prévu.

Pour importer des SVG dans Android Studio 1.4+, procédez comme suit:

  1. Faites un clic droit sur le dossier res/drawable
  2. Sélectionnez "Nouveau"
  3. Sélectionnez "Vector Asset"
  4. À ce stade, vous pouvez sélectionner une "icône de matériau", qui fonctionne très bien, et il y a un tas de belles icônes "gratuites" que vous pouvez sélectionner. Pour les développeurs indépendants, sans support de conception d'icônes, c'est sympa!
  5. OU - vous pouvez sélectionner "Fichier SVG local"
  6. Ensuite, choisissez un SVG de l'une ou l'autre option avec l'option "choisir". AVERTISSEMENT: c'est là que cela pourrait mal tourner si le SVG que vous importez n'est pas enregistré correctement.
  7. Appuyez sur "Suivant"
  8. Vérifiez qu'il enregistre au bon endroit, puis cliquez sur "Terminer"
  9. À ce stade, il est capable de référence avec: Android: icon = "@ drawable/ic_imagename" (en utilisant votre nom d'image au lieu de ic_imagename, bien sûr)

La réponse de @ CommonsWare a été très utile pour aboutir à la bonne solution, mais d'après ce que j'ai vu, générant plusieurs variantes de nouveaux projets à partir de différents paramètres de support de modèle et de version, il n'y avait aucun moyen de faire générer automatiquement les anciens dossiers de densité . Il se passe certainement plus ici qu'une simple sélection de version de modèle différente. Mais comme il l'a dit, selon le modèle/la version que vous sélectionnez, vous pouvez vous retrouver avec un ensemble différent de ces deux types de dossier pouvant être dessinés. Mais spécifique à ma question, Android Studio semble mettre l'accent sur cette nouvelle approche de ne pas créer du tout vos propres dossiers de densité de dessin.

C'est plutôt cool, imo, mais il a encore besoin de travail. En termes pratiques, je devrai probablement encore ajouter les dossiers de densité dessinables pour prendre en charge toutes les images avec lesquelles je travaille, jusqu'à ce que ce mécanisme prenne un peu plus en charge tous les types de rendus SVG.

Et encore un petit plus - Parce que tout est géré par Gradle (la génération réelle des dossiers de densité), vous pouvez ajouter des paramètres de construction via le mécanisme de saveur pour limiter les dossiers de densité que vous souhaitez générer. Donc, si, par exemple, vous pensez que les images mdpi ont atteint la fin de leur utilité pour votre base d'utilisateurs particulière et que vous souhaitez laisser cette taille/densité hors de votre application pour réduire de quelques Mo la taille de l'application, vous pouvez la définir dans la saveur de construction Gradle.

23
Bourne