安卓8.0桌面图标适配

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013394527/article/details/81836048

一、现状及问题 

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

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

       再比如某些app的图标在设计之初就已经加了圆角背景, 但是圆角的弧度却与MiUI不一致。导至出现四个角有小部分白色弧线,如下图

       google当然不希望自家的系统  给了用户这样不好的体验。所在 android 8.0 对桌面图标 设计了全新的规则。

二、8.0的桌面图标规则

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

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

三、可以不适配吗?

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

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

 

四、如何适配? 

  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编辑器,如下图

按数字标的位置 介绍一下这个 编辑器
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系统的应用图标适配所替代了,我们不用去管它。

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

 

 

展开阅读全文

没有更多推荐了,返回首页