Android应用图标适配

Android应用图标常见的除了“方形”和“圆角矩形”,有的设备上还出现了圆形应用图标。同一个应用,为什么在不同的系统设备上显示的效果不一样呢?带着疑问查找了一下官方文档,原来是 Android 8.0(API 26)引入了自适应启动图标,它可以在不同设备型号上显示为不同的形状效果。

1. 自适应图标简介

在一台原始设备制造商 (OEM) 设备上,自适应启动图标可显示为圆形,而在其他设备上则可显示为方圆形。每个设备的原始设备制造商 (OEM) 都会提供一个蒙版,系统使用该蒙版渲染所有具有相同形状的自适应图标。自适应启动器图标还会在快捷方式、“设置”应用、共享对话框和概览屏幕中使用。

我们可以通过定义 2 个图层(由一个背景图层和一个前景图层组成)来控制自适应启动图标的外观。必须要提供图标图层作为可绘制资源,而不使用图标轮廓周围的蒙版或背景阴影。

在 Android 7.1(API 25)及更早版本中,启动图标的尺寸为 48 x 48 dp。现在必须按照以下准则调整图标图层的尺寸:

  • 两个图层的尺寸都必须调整为:108 x 108 dp
  • 已遮挡的视图中显示的图标内层为:72 x 72 dp
  • 系统会为外层的 4 边保留 18 dp 的边距,以创建有趣的视觉效果(例如视差或脉动效果)。
    注意:动画视觉效果由受支持的启动器生成。视觉效果可能因启动器而异。
2. 应用图标介绍

在 AS 3.0后新建项目多了一个 mipmap-anydpi-v26 文件夹,这个文件其实就是用来存放自适应图标的,而且在 AndroidManifest.xml 文件<application>中也会多了一个android:roundIcon设置。

<application
     ...
     android:icon="@mipmap/ic_launcher"
     android:label="@string/app_name"
     android:roundIcon="@mipmap/ic_launcher_round" 
     ... >
</application>

这里 android:icon是设置普通图标,android:roundIcon是设置圆形图标;

新增的 mipmap-anydpi-v26 目录下的 ic_launcher.xmlic_launcher_round.xml 其实是 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="@drawable/ic_launcher_foreground" />
</adaptive-icon>

在 Android 8.0(API 26)后,新加了<adaptive-icon>元素。在<adaptive-icon>标签中<background>标签用于指定图标的背景层,<foreground>标签用于指定图标的前景层。<foreground><background>内部元素均支持android:drawable属性。

  • 背景文件 ic_launcher_background.xml 文件,内容如下图所示:

这是一个使用SVG格式绘制出来的带纹理的底图。背景层并不是一定要用SVG格式的图片,你也可以使用普通的PNG、JPG等格式的图片,甚至是直接指定一个背景色都可以。

  • 前景文件 ic_launcher_foreground.xml 文件,内容如下图所示:

这里也是使用SVG格式绘制出了一个Android机器人的Logo,并且这个机器人还是带投影效果的。当然了,前景层我们也是可以使用PNG、JPG等格式的图片。

3. 应用图标适配

使用 Image Asset Studio 帮我们生成适配系统的应用图标,具体方法请移驾 —— 《Android Studio中 Image Asset Studio用法》