【JavaSE(四)】Java面向对象(中)

项目中遇到一个问题,Android 8.0 系统上 APP 的 icon 显示的是默认的机器人的 icon,这是什么回事?原来 Android 8.0(API 级别 26)引入了自适应启动器图标,可以在不同设备模型中显示各种形状。下面看下官方酷炫动态图:

图1. 自适应图标支持各种设备之间不同的掩码。

可以通过定义 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

12345678910111213141516

<?xml version="1.0" encoding="utf-8"?><vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="108dp" android:height="108dp" android:viewportHeight="108" android:viewportWidth="108"> <path android:fillColor="#26A69A" android:pathData="M0,0h108v108h-108z" /> <path android:fillColor="#00000000" android:pathData="M9,0L9,108" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <!--省略部分代码--></vector>

ic_launcher_foreground.xml

1234567891011121314151617181920212223242526272829

<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" android:width="108dp" android:height="108dp" android:viewportHeight="108" android:viewportWidth="108"> <path android:fillType="evenOdd" android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z" android:strokeColor="#00000000" android:strokeWidth="1"> <aapt:attr name="android:fillColor"> <gradient android:endX="78.5885" android:endY="90.9159" android:startX="48.7653" android:startY="61.0927" android:type="linear"> <item android:color="#44000000" android:offset="0.0" /> <item android:color="#00000000" android:offset="1.0" /> </gradient> </aapt:attr> </path> <!--省略部分代码--></vector>

它们都是 vector,<foreground><background> 是支持android:drawable属性,我直接换成 ic_launcher_background.png 和 ic_launcher_foreground.png,<foreground><background>也支持@color/资源名

123456

<?xml version="1.0" encoding="utf-8"?><adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <!--<background android:drawable="@color/colorAccent" />--> <background android:drawable="@drawable/ic_launcher_background" /> <foreground android:drawable="@drawable/ic_launcher_foreground" /></adaptive-icon>

然后清单使用android:icon 属性以指定可绘制资源,还可以使用该android:roundIcon 属性定义图标可绘制资源。

123456

<application … android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" …></application>

如果要将常规自适应启动器图标应用于快捷方式的相同蒙版和视觉效果,使用以下:

  • 对于静态快捷方式,请使用该<adaptive-icon>元素。
  • 对于动态快捷方式,请在createWithAdaptiveBitmap() 创建方法时调用该 方法。

大功告成,Android 8.0 上能自适应,以下是默认的图标。

注意:Android Studio 3.0 以下的编译器无法找到 adaptive-icon 标签,这点未验证。

源码

公众号「吴小龙同学」回复:AdaptiveIconsSample,获得完整 Sample 代码。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

chrome开发者工具-Timeline

最近发现,许多前端开发人员(包括作者我哈),对chrome的开发者工具中的使用并不是特别深入,而本文时对chrome开发者工具Timeline的一个...

1896
来自专栏直播开发

FLV视频文件格式图示

FLV协议是一种常见的视频文件格式,现在很多的直播中经常使用到http-flv协议,即在http上传送flv格式数据。由于笔者从事直播系统后台开发,对flv格...

1382
来自专栏HBStream流媒体与音视频技术

借用PortAudio采集和播放音频,实现双路混音器

3205
来自专栏张戈的专栏

让知更鸟主题的分类图标支持二级分类

今天,突然想启用知更鸟主题的分类图标功能,之前是怕影响速度,现在开了静态缓存,安心了一点。 参照鸟哥的方法在主题选项里面开启后,发现图片的超链接打不开!检查后发...

34312
来自专栏BestSDK

Dynamsoft Camera SDK 6.0发布,轻松捕捉图像和视频流

Dynamsoft Camera SDK提供了Java api,使您可以轻松地从浏览器兼容的USB视频类(UVC)网络摄像头捕捉图像和视频流。 ? 使用基于浏览...

3136
来自专栏IMWeb前端团队

3分钟13行代码搭建sass版移动端网格系统

本文作者:IMWeb 结一 原文出处:IMWeb社区 未经同意,禁止转载 一般来说,网格系统分为container、row及column三大部分,而c...

1957
来自专栏Hongten

pygame系列_pygame的各模块叙述

在pygame中,有很多模块,每个模块对应着不同的功能,如果我们知道这些模块是做什么的,那么,对我们的游戏开发会起到关键性的作用。

752
来自专栏desperate633

Python爬虫之爬取中国大学排名(BeautifulSoup库)分析

首先,我们确定需要爬取的网页 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html

511
来自专栏张善友的专栏

Fityk-曲线拟合工具

Fityk是一个非线性拟合和数据分析工具,通常用于实验数据的分析,可以支持常见的峰形功能。它界面直观,支持进行用户定义,可以进行优化和自动处理 。可运行于Lin...

1985
来自专栏数据小魔方

这种自带黑科技的R包,请给我来一打

今天要介绍的这个R包,有些特别! 它即不能做可视化,也不能用来抓数据! 它的核心功能是抓拍,对,你没听错,就是抓取,和狗仔差不多! 而且专门抓拍网页,有点儿类似...

34716

扫码关注云+社区