项目中遇到一个问题,Android 8.0 系统上 APP 的 icon 显示的是默认的机器人的 icon,这是什么回事?原来 Android 8.0(API 级别 26)引入了自适应启动器图标,可以在不同设备模型中显示各种形状。下面看下官方酷炫动态图:
可以通过定义 2 层来控制自适应启动器图标的外观,包括背景和前景。您必须提供图标图层作为可绘图,图标轮廓周围不能有蒙版或背景阴影。
图2. 自适应图标使用 2 个图层和 1 个蒙版进行定义。
在 Android 7.1(API级别25)及更早版本中,启动器图标大小为 48 x 48 dp。必须使用以下准则来调整图标图层的大小:
- 两层的尺寸必须为 108 x 108 dp。
- 图标的内部 72 x 72 dp 出现在蒙版视口内。
- 系统会在四面各留出 18 dp,以产生有趣的视觉效果,如视差或脉冲。
我验证了,不是这些尺寸也是可以的,但我们还是严格按照这个准则来吧。
图3. 自适应图标支持各种视觉效果。
注意: 如果您没有使用必要的图层更新启动器图标,则该图标与系统 UI 显示的其他图标看起来不一致,并且不支持视觉效果。
用 XML 创建自适应图标
我们首先创建一个 Sample 项目,如图:
比以往多一个 res/mipmap-anydpi-v26 文件,打开,有背景和前景。
ic_launcher_background.xml
ic_launcher_foreground.xml
它们都是 vector,<foreground>
和<background>
是支持android:drawable
属性,我直接换成 ic_launcher_background.png 和 ic_launcher_foreground.png,<foreground>
和<background>
也支持@color/资源名
。
然后清单使用android:icon
属性以指定可绘制资源,还可以使用该android:roundIcon
属性定义图标可绘制资源。
如果要将常规自适应启动器图标应用于快捷方式的相同蒙版和视觉效果,使用以下:
- 对于静态快捷方式,请使用该
<adaptive-icon>
元素。 - 对于动态快捷方式,请在
createWithAdaptiveBitmap()
创建方法时调用该 方法。
大功告成,Android 8.0 上能自适应,以下是默认的图标。
注意:Android Studio 3.0 以下的编译器无法找到 adaptive-icon 标签,这点未验证。
源码
公众号「吴小龙同学」回复:AdaptiveIconsSample,获得完整 Sample 代码。