安卓8.0桌面图标适配

2024-09-06 07:48
文章标签 安卓 8.0 适配 桌面图标

本文主要是介绍安卓8.0桌面图标适配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、现状及问题 

        在安卓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文件。
安装效果如下图 :

 

 

这篇关于安卓8.0桌面图标适配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141425

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

安卓玩机工具------小米工具箱扩展工具 小米机型功能拓展

小米工具箱扩展版                     小米工具箱扩展版 iO_Box_Mi_Ext是由@晨钟酱开发的一款适用于小米(MIUI)、多亲(2、2Pro)、多看(多看电纸书)的多功能工具箱。该工具所有功能均可以免root实现,使用前,请打开开发者选项中的“USB调试”  功能特点 【小米工具箱】 1:冻结MIUI全家桶,隐藏状态栏图标,修改下拉通知栏图块数量;冻结

Linux 删除 当前下的 mysql-8.0.31 空文件夹

在Linux中,如果你想要删除当前目录下的名为mysql-8.0.31的空文件夹(即该文件夹内没有任何文件或子文件夹),你可以使用rmdir命令。但是,如果mysql-8.0.31文件夹并非完全为空(即它包含文件或子文件夹),rmdir命令会失败。 如果你的目标是删除mysql-8.0.31文件夹及其内部的所有内容(无论是否为空),你应该使用rm命令结合-r(或-R,它们是等价的)选项来递归地删

鸿蒙开发5.0【Picker的受限权限适配方案】

Picker由系统独立进程实现,应用可以通过拉起Picker组件,用户在Picker上选择对应的资源(如图片、文档等),应用可以获取Picker返回的结果。 类型受限权限使用的picker音频ohos.permission.READ_AUDIO,ohos.permission.WRITE_AUDIOAudioViewPicker文件ohos.permission.READ_DOCUMENT,oh

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器,按芯片来分,有以下几种: CH340PL2303CP2104FT232 一般来说,采用 CH340 芯片的适配器,性能比较稳定,价

mysql数据库8.0小版本原地升级

mysql数据库8.0小版本原地升级 准备工作升级工作停库使用新版本软件启动数据库更新环境变量重启数据库 升级日志 OS release: CentOS 7.9升级前DB version: MySQL 8.0.30数据库升级安装包:mysql-8.0.36-linux-glibc2.12-x86_64.tar.xzMySQL Shell安装包:mysql-shell-8.0.36

安卓实现弹出软键盘屏幕自适应调整

今天,我通过尝试诸多方法,最终实现了软键盘弹出屏幕的自适应。      其实,一开始我想通过EditText的事件来实现,后来发现,安卓自带的函数十分强大,只需几行代码,便可实现。实现如下:     在Manifest中设置activity的属性:android:windowSoftInputMode="adjustUnspecified|stateHidden|adjustResi

android屏幕适配的问题

这里主要是介绍两种方法:恰巧这两种方法都是出自同一个大神的手笔,当然我这里不做详细的介绍了,大神的博客里面有详细的介绍 1  百分比 洋神的博客:http://blog.csdn.net/lmj623565791/article/details/46767825 github :https://github.com/hongyangAndroid/android-percent-suppor

安卓错误经验分析之 R cannot be resolved to a variable

当出现 R cannot be resolved to a variable  错误的时候,不能采用编译器建议的修改方法,试着clean一下,然后查找gen文件夹下R.java是否丢失,如果不存在R.java,程序没有报错且采用其它方法均无效,八成是res文件夹下的layout或者manifest出现错误没有显示出来,需要自己查一遍,否则无法根本解决问题,盲目修改代码是没用的。