较新版本的 Android Studio 和只有两个可绘制目录 - drawable 和 drawable-v21
Posted
技术标签:
【中文标题】较新版本的 Android Studio 和只有两个可绘制目录 - drawable 和 drawable-v21【英文标题】:Newer versions of Android Studio and only two drawable directory - drawable and drawable-v21 【发布时间】:2016-03-24 10:53:44 【问题描述】:在旧版本的 android Studio 中,所有可绘制存储桶文件夹都是默认创建的(即 drawable-mdpi、drawable-hdpi 等)。在较新版本的 Android Studio 中,它仅提供 drawable 和 drawable-v21。这是为什么?
Android(以其无限智慧)不再为您提供单独的存储桶文件夹是否有原因?
请注意,我知道您可以手动添加它们,但我想确保没有一些新的最佳实践理由不再使用这些文件夹。
【问题讨论】:
我记得读过一些关于他们试图鼓励一种新的最佳实践的文章——将 SVG 用于您的可绘制对象而不是光栅图像,因此您只需要一个可以干净地调整大小的图像。跨度> 我认为这部分是因为引入了 mipmaps 文件夹 感谢您的来信。据我记得,只有较新版本的 Android 仅支持 SVG,所以这不适用于我从事的大多数项目,但我会调查这可能的原因。而且我对 SVG 的事情也可能错了,不向后兼容,会检查一下! @user2511882 根据 Google 博客,mipmaps 应该只用于应用程序图标。所以仍然在想办法把其他资产放在哪里。 @Bourne 这是什么版本? 1.5? 【参考方案1】:感谢所有试图提供帮助的人。您帮助我得出了最终答案,但没有一种解决方案是完全正确的。 @user3137702 可能是最接近的,因为它与向矢量/SVG 的整个迁移有关。我找不到明确的答案,比如直接来自谷歌的东西(虽然我想它就在那里),但从我从一堆文章中收集到的信息来看,他们这样做可能是有原因的。
对于初学者来说,这似乎是从 Android Studio 1.4 开始的。我现在是1.5。似乎Android正在朝着不再需要您为drawables创建自己的密度文件夹(即mdpi,hdpi等)的方向发展(mipmaps不同,所以请不要将其与我所说的混淆) .从 Android Studio 1.4 开始,它将获取您放入常规可绘制文件夹(而不是 v21 文件夹)中的 SVG,将它们转换为 PNG,并在构建序列期间将它们放置在为您自动生成的密度文件夹中(所以 Gradle基本上是为您执行此操作)适用于 API 21 之前的所有版本。对于 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)
@CommonsWare 的回复对找到正确的解决方案非常有帮助,但据我所见,从不同的模板和版本支持设置生成了几个新项目的变体,实际上没有任何方法可以让旧的密度文件夹得到自动生成。这里肯定发生的不仅仅是不同的模板版本选择。但正如他所说,根据您选择的模板/版本,您最终可能会得到一组不同的这两种可绘制文件夹类型。但具体到我的问题,Android Studio 似乎确实强调了这种根本不创建您自己的个人可绘制密度文件夹的新方法。
这很酷,imo,但它仍然需要一些工作。实际上,我可能仍需要添加可绘制密度文件夹以支持我使用的所有图像,直到此机制对所有类型的 SVG 渲染提供更多支持。
还有一个花絮 - 因为这一切都是通过 Gradle(密度文件夹的实际生成)处理的,所以您可以通过风味机制添加构建设置以限制您想要生成的密度文件夹。因此,例如,如果您觉得 mdpi 图像对您的特定用户群的用处已经结束,并且希望将该大小/密度从您的应用程序中移除以将应用程序大小减少几 MB,您可以将其设置为Gradle 构建风格。
【讨论】:
是的,关键是您必须单击“新建”->“矢量资源”才能从 SVG 文件创建 XML 可绘制对象。 这仅适用于 SVG 吗?我想将 .PNG 文件复制到可绘制对象。我有两个选项 drawable 和 drawable-v24。我们必须复制到哪个文件夹??以上是关于较新版本的 Android Studio 和只有两个可绘制目录 - drawable 和 drawable-v21的主要内容,如果未能解决你的问题,请参考以下文章
即使使用新版本的 Windows 2.2.3,Android Studio 也会一直冻结
如果我在 API 级别 21 (5.0) 上制作应用程序,它是不是适用于较新版本的 android?