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

0xA*_*iHn 33 android android-mipmap android-studio-3.0

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

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

tyc*_*czj 25

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

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

android:icon="@mipmap/ic_launcher"
Run Code Online (Sandbox Code Playgroud)

如果您查看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>
Run Code Online (Sandbox Code Playgroud)


Ani*_*kur 12

上面的两个答案给出了很好的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及更高版本中提供,如其他答案所述.希望这可以帮助.

  • 似乎还有更多的事情。由于我更改为仅支持 v28 及更高版本,因此我将“mipmap-anydpi-v26”重命名为“mipmap-anydpi”——但这弄乱了自适应图标。 (4认同)

0xA*_*iHn 6

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

要添加一个自适应图标来替换 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>
Run Code Online (Sandbox Code Playgroud)

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

  • 但是当我看到 XML 的内容时,它指向一个矢量图形代码块,说实话,我是矢量图形的新手,并且会要求任何人了解如何处理当前的 PNG,因为我的图标有点复杂,目前为我的 PNG 图标生成矢量图形需要大量时间,那么我该如何进行呢? (4认同)