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.xml 和 ic_launcher_round.xml 其实是 XML文件,而不是一张图片,代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon
<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等格式的图片。