来了!Android 12 适配你准备好了吗?

前言

随着各个厂商的 Android 12 版本进入 Beta 阶段,相信不少的小伙伴都陆陆续续的收到了厂商的 Bug 通知。

啊!这,我们连 Android 12 的测试机都还没有,怎么去解决这些 Bug 呢?相信这些是很多开发者的心声!

这周,为了解决公司 App 在三星手机 OneUi 4.0 Beta 的必现启动 Bug,我自己的手机也升级到了 Android 12,结果 Bug 并没有必现!

难顶

虽然 Bug 没有解决,但用上 Android 12 以后,很多方面还是体验不错的,比如更加注重用户的隐私,可以根据壁纸设置自己的主题色等

适配颜色

好了,回归正题,我们该如何针对 Android 12 做出自己的调整呢?其实,官网已经给出了答案。

一、启动页面

在过去的一段时间内,每个应用的闪屏页其实是由开发者自己定义的,并没有一个明确的标准。

但在 Android 12 的手机上,即使我们不做任何适配,系统也为默认提供一个闪屏动画。

闪屏动画

UI 大大们会满足于默认的的闪屏页吗?显然不会!

所以,Android 12 也为我们准备新的 SplashScreen Api,通过它们,我们就可以控制启动时进入应用的动画、显示应用图标的启动动画,以及应用本身的过度。

简单介绍一下这个动画的机制,首先动画中的元素由 Android 清单中的 xml 资源文件定义,每个元素都有深色模式和浅色模式版本

它们由窗口背景(4)、动画形式的应用图标(1)和图标背景(2)组成:

image.png

简单说明:

  • 应用图标(1)是矢量图标,可以是静态或者是动画,官方建议时长不超过1000ms。应用图标可以设置为 AnimationDrawableAnimatedVectorDrawable,这样就可以支持动画效果。
  • 图标背景(2)可选,看需要添加。
  • 窗口背景 (4) 由不透明的单色组成。

每一个启动动画都会由进入动画和退出动画组成,进入动画可以自定义,退出动画不可自定义。最后看一下谷歌官方的支持动画效果的启动动画:

splash-screen-gmail-example.gif

如果你想进一步研究,可以学习:

《官方文档》
《Jetpack新成员SplashScreen:打造全新的App启动画面》

二、小组件

在 Android 中,小组件算是一个很老的功能了,奈何一直不温不火。说白了,就是设计的不美观!

隔壁 iOS 14 的出现确实让小组件火了一把

iOS 14 小组件

所以,在 Android 12 上,谷歌的设计师可是费了不少心思

Android 12 小组件

因此带来了许多新的 Api,主要涉及的改动如下:

  1. 圆角
  2. 动态颜色,支持黑暗模式中动态改变颜色
  3. 通过创建一个指定的 configuration activity 去声明一些配置属性,当小组件选择成功的时候。
  4. 新的 CheckBox、Switch 和 RadioButton 将支持状态切换。
  5. 允许动态的布局和调整组件的尺寸,并作出响应。
  6. 优化了小组件切换到应用之后的过度动画
  7. 允许动态的调整小组件的 RemoteView

想要知道更加详细的信息,可以查看:

《小组件文档》

三、电话和图片通知

Android 12 中新增了电话通知样式 Notification.CallStyle,该通知样板可以为用户指明当前通话的重要性。

通知样式

其中使用:

  • Notification.CallStyle.forIncomingCall 为来电创建通话样式。
  • Notification.CallStyle.forOnGoingCall 为进行中的通话创建样式。
  • Notification.CallStyle.forScreeningCall 为过滤来电创建通话样式通知。

除此以外,已有的 MessageStyleBigPictureStyle 将支持动图,可以用户带来新的通知体验。

更加详细的信息:

《通知栏》

四、富文本升级

富文本在 Android 12 中也得到了升级,我们可以向界面中增加新的接口 OnReceiveContentListener

image.png

听好了,它可以接受来自于(剪贴板粘贴、键盘输入或者拖放)的所有内容(包括文本、标记文本、图片、视频或者音频等)

富文本动图

看这强大的功能,隔壁的产品已经馋哭了~

更加详细的信息:

《富文本》

五、RenderEffect

Android 12 中新增的 RenderEffect 真的是太强大了,它可以将常见的(如模糊处理、颜色滤镜、Android 着色器效果以及更多效果)应用于 View 和 渲染层次结构。

RenderEffect

以前,为了实现毛玻璃的效果,需要大段的代码,而现在只要一行代码:

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))
复制代码

Android 程序员直呼好家伙!

六、支持动图

新的 Android 12 的 NDK 中的 ImageDecoder API 已经进行了更新,可以解析 webp 和 gif 图片的所有格式和时间帧。

官方声明,使用 ImageDecoder 可以进一步减小包大小。另外,Android 12 完成了对 AV1 图片文件格式 (AVIF) 的图片的支持

七、隐私权限

在 Android 12 中,用户的隐私政策变得越来越严格,比如,当我们在使用相机或者麦克风权限的时候,屏幕的右上角会提示一个绿色的点,提醒用户,该 App 正在使用具体的权限。

隐私中心

另外用户的手机中会出现隐私中心,什么 App 什么时候使用了什么权限都会展示在上面,开发者能够做的,就是向用户解释,该 App 为什么会调用这个权限,如何解释,请查看官方具体的文档。

八、存储变更

新增一个目录 Environment.DIRECTORY_RECORDINGS 为音频文件的目录。

在 Android 11 中,每次我们的应用尝试修改或删除文件时,都必须向用户显示一个确认对话框。为了解决这个问题,我们可以向用户申请某项操作的权限,从而提升用户的使用便利性。

九、性能等级

谷歌通过与厂家合作,推出了一个叫做性能等级的东西。

它是一个很有意思的东西,它定义了超出了 Android 基准要求的硬件功能。

性能等级

主要以下东西定义:

  1. 视频中的编码解码、丢帧等。
  2. 相机中的分辨率、视频和 HDR等。
  3. 基础的内存、分辨率和IO速度等。

我们可以通过查询 Build.VERSION.MEDIA_PERFORMANCE_CLASS 得到性能等级。

这个功能有什么意义呢?我们可以通过性能等级去做一些划分,比如性能等级12去加载高质量的图片,性能等级11加载中等质量的图片,从而提升不同性能等级用户的使用体验。

十、Material You

Android 12 推出了新的 Material 设计语言,它并叫做 Material Design 3,而是叫做 Material You,意思就是帮助开发者制作更加定制化的、美观的应用。

Material You

如果你的 App 想遵循新的设计规范,可以使用新的组件:

material-components-android

一个有意思的地方是中文版本的官网并没有展示 Material You,而在英文版本的官网事放在了首位!难道知道国内的设计大大们不会遵循这种开发语言?

表情

总结

本文我只介绍了我认为的比较重要的功能,还有一些更多信息等待大家的探索!如果你有什么想法,评论区见!

更多 API 更新信息请查看:

《Features and APIs Overview》

猜你喜欢

转载自juejin.im/post/7031411081457336357