欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安卓8.0桌面图标适配

程序员文章站 2024-03-17 14:26:40
...

一、现状及问题 

        在安卓8.0之前的版本中,原生安装系统 在应用安装到手机后,显示在桌面上的图标只有一种方式来决定, 即在manifest.xml的Application节点中设置 icon标签的属性,这个任何安卓开发者都应该清楚。   
        上面我们说是在原生安卓系统中的表现,那么在国内就不一定是这样。 拿小米手机来举例,MiUI 8.2 对应 Android 6.0.1 版本,我们给app设置一个 没有背景色的icon后,安装到小米手机上看看效果。   
          下图 左侧是 代码设置,及预览图标; 右侧是 安装后显示的效果。
 安卓8.0桌面图标适配

        我们发现,MiUI 在图标的背景下 默认加了 纯色的圆角矩形背景。 Android 原生系统在设计之初就是选择*与开放,桌面图标也不例外, 但MiUI 在桌面图标上 完全抛弃 android 的理念,选择效仿 iOS 系统。    这两种理念都有自己的优点,并没有谁高人一等。 
       但是要知道国内并非只有 MiUI  一家系统,别人家的系统可能没加这层纯色圆角矩形的背景,APP开发都可能也不希望加这层纯色背景,这就导致某些没有背景色的icon  设计出来时挺好看,但到小米手机上看起来就有点怪,比如下图:
安卓8.0桌面图标适配

       再比如某些app的图标在设计之初就已经加了圆角背景, 但是圆角的弧度却与MiUI不一致。导至出现四个角有小部分白色弧线,如下图
安卓8.0桌面图标适配
       google当然不希望自家的系统  给了用户这样不好的体验。所在 android 8.0 对桌面图标 设计了全新的规则。

二、8.0的桌面图标规则

      从Android 8.0系统开始,
1、应用程序的图标被分为了两层:前景层和背景层
      也就是说,我们在设计应用图标的时候,需要将前景和背景部分分离,前景用来展示应用图标的Logo,背景用来衬托应用图标的Logo。需要注意的是,背景层在设计的时候只允许定义颜色和纹理,但是不能定义形状。
2、形状只能由厂商定制化Android rom时 来 提供一个 定义形状的 mask,这个mask可以是圆角矩形、圆形或者是方形等等,视具体手机厂商而定,就可以瞬间让手机上的所有应用图标都变成相同的规范。

例子:如下图所示, 其中 安卓机器图标 与 背景十字网格  都 由 app开发者提供, 最上面的圆形蒙层由厂商提供。
安卓8.0桌面图标适配

三、可以不适配吗?

        如果项目进度紧,开发者还想在8.0系统上继续使用原来 只提供一个icon的方式,这时可以将 targetSdkVersion 设置为低于 26(8.0的api等级)的值 , 这样 系统仍会以旧版本的方式 来显示桌面图标。   类似 6.0权限适配、7.0 外部存储文件跨进程访问权限 。

        如果我不适配,但又将 targetSdkVersion 设置为了 26 会发生什么呢? 答案是 系统最终会 添加默认的背景层 及 厂商默认的mask形状。 如下图, 白色为默认背景层,圆形为此系统默认形状, 这看起来就非常丑了。
安卓8.0桌面图标适配
 

四、如何适配? 

  1、targetSdkVersion 设置 26或(高于26,毕竟9.0已经发布了)。
  2、在 res 目录下建立文件夹 mipmap-anydpi-v26 ,再在 mipmap-anydpi-v26目录 创建 ic_launcher.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>

这是一个8.0系统应用图标适配的标准写法,在<adaptive-icon>标签中定义一个<background>标签用于指定图标的背景层,定义一个<foreground>标签用于指定图标的前景层。 

这是一个使用SVG格式绘制出来的带纹理的底图。当然如果你看不懂这里面的代码也没有关系,因为我也看不懂。SVG格式的图片都是使用AI、PS等图像编辑软件制作之后导出的,基本没有人可以手工编写SVG图片。

当然,背景层和前景层 并不是一定要用SVG格式的图片,你也可以使用普通的PNG、JPG等格式的图片,甚至是直接指定一个背景色都可以。 

五、制作适配的素材

在工程res目录 上右键,选择  “NEW”->"Image Asset" 可以打开 Android Studio 自带的  Asset Studio编辑器,如下图
安卓8.0桌面图标适配
按数字标的位置 介绍一下这个 编辑器
1、生成的icon的类型, 默认生成  适配8.0 及 兼容8.0以前版本的 png图标
2、生成的各版本的 icon 文件 名称
3、这一行里有三个tab,分别是 编辑 前景、背景、旧版本(即8.0以前的版本)
4、生成的前景层文件的名称
5、前景层 资源的类型,三个类型分别是:自己设计 的 png图片、 系统默认的 艺术图标、普通文本
6、根据 选择的前景资源的类型,这里分别设置 png路径、艺术图标种类和颜色、文本字体和颜色
7、缩放前景层资源

需要注意的是 在 适配旧版本的tab中的几个选项, Legacy Icon  很好理解,api<=25 即为 8.0之前的版本的 图标的 形状。 但下面还有个 Round Icon api=25(即7.0), 这是怎么回事呢?  这是一个只适用在Android 7.1系统上的过渡版本,很快就被8.0系统的应用图标适配所替代了,我们不用去管它。

安卓8.0桌面图标适配

按上述操作后, 最终生成 各版本的 桌面图标, 在mipmap-anydpi-v26目录生成 适配8.0的 图标.xml文件, 在其它 mipmap 目录下 会生成 适配 低于 8.0 版本的 icon.png文件,及适配7.1的 icon_round.png文件。
安装效果如下图 :
安卓8.0桌面图标适配