Android Studio的较新版本,只有两个可绘制目录-drawable和drawable-v21

Android Studio的较新版本,只有两个可绘制目录-drawable和drawable-v21,android,android-layout,android-studio,drawable,Android,Android Layout,Android Studio,Drawable,对于旧版本的Android Studio,默认情况下会创建所有可绘制的bucket文件夹(即可绘制mdpi、可绘制hdpi等)。在较新版本的Android Studio中,它只提供drawable和drawable-v21。为什么呢 Android(以其无限的智慧)不再提供单独的存储桶文件夹,这有什么原因吗 请注意,我知道您可以手动添加它们,但我想确保没有新的最佳实践理由不再使用这些文件夹 感谢所有试图帮助的人。你帮我找到了最后的答案,但没有一个答案是完全正确的@user3137702可能是最接

对于旧版本的Android Studio,默认情况下会创建所有可绘制的bucket文件夹(即可绘制mdpi、可绘制hdpi等)。在较新版本的Android Studio中,它只提供drawable和drawable-v21。为什么呢

Android(以其无限的智慧)不再提供单独的存储桶文件夹,这有什么原因吗


请注意,我知道您可以手动添加它们,但我想确保没有新的最佳实践理由不再使用这些文件夹

感谢所有试图帮助的人。你帮我找到了最后的答案,但没有一个答案是完全正确的@user3137702可能是最接近的,因为它与向vectors/SVG的整个移动相关。我找不到一个明确的答案,比如直接从谷歌(尽管我想象它就在那里)得到的答案,但从我从一堆文章中收集的信息来看,他们这么做可能有原因

首先,它看起来像是从Android Studio 1.4开始的。我现在在1.5。Android似乎正朝着不再需要你为drawables创建自己的密度文件夹(即mdpi、hdpi等)的方向发展(Mipmap不同,所以请不要把它与我所说的混淆)。从Android Studio 1.4开始,对于所有早于API 21的版本,它会将您放在常规可绘制文件夹(而不是v21文件夹)中的SVG转换为PNG,并在构建序列期间为您放置在自动生成的密度文件夹中(因此Gradle基本上会为您这样做)。对于21岁及以上的人,SVG的支持是不同的,这是一个完全不同的主题。但这本质上使SVG支持向后兼容到API 1

然而,有一个大问题。这种SVG转换并不总是像您希望的那样成功。它只支持SVG文件的一个子集,因此根据保存方式(即保存时应用的设置),它可能无法正确渲染。即使是常用的设置,如渐变和填充图案、局部IRI引用和变换,也不受支持(目前)。如果您使用的是未生成的SVG文件,则导入它们时可能会遇到问题。如果你或与你一起工作的人直接生成了这些文件,你可能需要试验如何保存这些文件,并且你应该经常在旧版本的Android上测试构建,以确保其结果符合预期

要将SVG导入Android Studio 1.4+,请执行以下简单步骤:

  • 右键单击res/drawable文件夹
  • 选择“新建”
  • 选择“矢量资源”
  • 此时,您可以选择一个“材质图标”,它可以工作 真的很好,有一堆美丽的“免费”图标你可以 从中选择。对于独立开发者,没有图标设计支持, 这太好了
  • 或者-您可以选择“本地SVG文件”
  • 然后使用“选择”选项从任一选项中选择SVG。警告:如果导入的SVG未正确保存,则可能会出现错误
  • 点击“下一步”
  • 验证它是否保存在正确的位置,然后单击“完成”
  • 在这一点上,它可以通过以下方式引用:android:icon=“@drawable/ic_imagename”(当然,使用您的图像名而不是ic_imagename)
  • @Commonware的回应非常有助于找到正确的解决方案,但从我所看到的情况来看,从不同的模板和版本支持设置生成多个不同的新项目,实际上没有任何方法可以自动生成旧的density文件夹。这里肯定不止是一个不同的模板版本选择。但正如他所说,根据您选择的模板/版本,您可能最终会得到这两种可绘制文件夹类型的不同集合。但具体到我的问题,Android Studio似乎强调了这种新方法,即根本不创建自己的可绘制密度文件夹

    在我看来,这很酷,但还需要一些改进。实际上,我可能仍然需要添加drawable density文件夹来支持我处理的所有图像,直到这种机制对所有类型的SVG渲染都有了一点支持


    还有一个小贴士——因为这都是通过Gradle(密度文件夹的实际生成)处理的,所以可以通过flavor机制添加构建设置,以限制要生成的密度文件夹。因此,例如,如果您觉得mdpi图像对您的特定用户群已经没有用处了,并且希望将该大小/密度从应用程序中删除,从而将应用程序大小减少几MB,您可以在Gradle build flavor中进行设置。

    我记得读到过一些关于他们正在尝试鼓励的一种新的最佳实践的文章——将SVG用于您的绘图,而不是光栅图像,因此,您只需要一个可以清晰调整大小的图像。我认为这部分是因为mipmaps folder的引入。谢谢您的说明。据我记忆所及,只有较新版本的Android才支持SVG,所以我所从事的大多数项目都不支持SVG,但我将探讨这可能的原因。我可能也错了SVG的事情,不向后兼容,我会检查一下@user251182根据谷歌博客,mipmaps应该只用于应用程序图标。所以还在想办法把其他资产放在哪里。@Bourne这是什么版本?1.5?是的,关键是您必须单击“新建”->“矢量资源”以创建可从SVG文件绘制的XML。这是否仅适用于SVG??我想将.PNG文件复制到drawable。我有两种选择,一种是drawable,另一种是drawable-v24。我们必须复制到哪个文件夹??