什么是Android Studio 3.0中res目录中的mipmap-anydpi-v26?

时间:2017-07-13 12:31:11

标签: android android-studio-3.0 android-mipmap

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

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

3 个答案:

答案 0 :(得分:21)

Android Studio 3为您的应用创建adaptive icon,仅适用于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>

答案 1 :(得分:6)

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

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

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

因此您可以使用mipmap-anydpi-v26或drawable-anydpi-v26。所有资源文件夹将遵循上述逻辑。

  

现在我们知道“为什么要使用mipmap-anydpi-v26”的答案了?让我们尝试了解为什么使用“ mipmap-anydpi-v26 / ic_launcher.xml”。

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

答案 2 :(得分:2)

我已经找到了解释,这里有一些背景:

要添加替换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+设备。

相关问题