53

在 Android Studio 3.0 中,一旦我们创建了一个项目,目录mipmap-anydpi-v26中就会自动创建一个名为的文件夹res。它实际上是做什么的?为什么我们需要它?我们将如何将其用于开发目的?

此外,项目设置后,此文件夹中会自动创建两个 XML 文件。为什么这些 XML 文件驻留在 mipmap 文件夹中?我认为我们应该将所有 XML 文件保存在可绘制文件夹中,而不是 mipmap。

4

3 回答 3

40

Android Studio 3 为您的应用创建一个自适应图标,该图标仅在 SDK 26 及更高版本中可用。启动器图标应该放在 mipmap 文件夹中。

如果您查看清单,您可以看到它引用ic_launcher

android:icon="@mipmap/ic_launcher"

如果您查看 mipmap 文件夹,您会看到正常的 5 个不同的启动器图标,这些图标将用于低于 SDK 26 的任何内容。对于 SDK 26 及更高版本,它使用文件anydpi-v26夹中的 XML 文件来使用自适应图标。

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background"/>
    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
于 2017-07-13T13:00:20.497 回答
15

上面的两个答案都很好地总结了mipmap-anydpi-v26文件夹的作用,但我觉得为什么缺少部分。所以这是我的 2 美分。

anydpi:这些资源在任何 dpi 中都优先。因此,即使您拥有mipmap-hdpimipmap-mdpi匹配当前设备密度,来自 mipmap-anydpi 的资源也将始终被拾取。

anydpi-v26:这是对 anydpi 的附加过滤器。这表示仅当 SDK/API 级别为 26 或更高(Oreo)时,anydpi-v26无论设备密度如何,都将始终从资源中获取资源。

所以你可以有 mipmap-anydpi-v26 或 drawable-anydpi-v26。所有资源文件夹都将遵循上述逻辑。

现在我们知道了“为什么选择 mipmap-anydpi-v26”的答案?让我们试着理解为什么“mipmap-anydpi-v26/ic_launcher.xml”。

这是因为ic_launcher.xml用于描述您的应用程序的自适应图标,该图标仅在 SDK 26 及更高版本中可用,如其他答案所述。希望这可以帮助。

于 2018-07-04T10:16:54.060 回答
8

我找到了一个解释,这里有一些上下文:

要添加一个自适应图标来替换 API 26+ 设备上的所有 PNG,您将添加一个res/mipmap-anydpi-v26/ic_launcher.xml如下所示的文件:

<adaptive-icon
    xmlns:android="http://schemas.android.com/apk/res/android">
  <background android:drawable="@drawable/ic_launcher_background"/>
  <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

通过将其放在mipmap-anydpi-v26文件夹中,资源系统将优先使用它而不是其他 dpi 文件夹中的任何文件(正是您想要的,因为该文件正在替换所有这些文件)并且它应该只在 API 26+ 设备中使用.

于 2017-07-13T14:31:17.613 回答