在Android Studio 3.0中,创建项目后,会在mipmap-anydpi-v26
目录中自动创建名为res
的文件夹。它实际上做了什么?我们为什么需要它?我们如何将其用于开发目的?
此外,在项目设置后,此文件夹中会自动创建两个XML文件。为什么这些XML文件驻留在mipmap文件夹中?我认为我们应该将所有XML文件保存在可绘制文件夹而不是mipmap中。
答案 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-hdpi
或mipmap-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+设备。