2019 年 7 月曾经写过一篇文章揭露 Android 定制系统「阉割」密码管理器现象的文章,虽然从我自己微不足道的影响力出发这样的文章甚至都算不上「揭露」,但 2020 年我在用的 ColorOS 7 和 MIUI 12 都已经拥有了完整的自动填充框架和第三方密码管理器支持,这一点还是给了我信心。
不过在去年 7 月到今年 5 月这段密集使用国内定制 UI 并与朋友沟通使用体验的过程中,我发现了更多和上面提到这个自动填充框架类似的问题——定制 UI 的理想状态是「基于原生且优于原生」,但我们依然发现了不少原生比定制 UI 做得更好的地方。在从原生到定制的过程中,或许是出于对自家用户使用习惯的照顾,或许是因为开发能力不足,这些功能也和早前的自动填充框架一样无情「被砍」。
作为一个一直以来都对原生 Android 保持高度关注的用户,在这篇文章中我就来分享一些我觉得定制 UI 可以向原生 Android「靠拢」的地方。
关联阅读:这个国内厂商不该「阉割」的功能,让你不用每次都手动输密码
无需跳转的常用设置面板
在 Android 10 中,Google 引入了一项名为「设置面板(settings panels)」的 API,借助这个 API,应用可以直接在应用内向我们展示系统设置。
在 Google 设想的场景中有这么一种情况:当我们打开网络浏览器时,发现设备已经开启了飞行模式,此时应用只能通过弹窗或 toast 通知的方式要求我们前往设置打开网络连接开关——而在 Android 10 里,应用此时可以直接显示一个设置面板,允许我们快速更改主要的连接设定,如飞行模式、WLAN、移动数据等等,无需在应用和系统设置间来回跳转。
无需离开应用就能进行基本设置
这个功能和 Google 所设想的场景乍看上去似乎有些鸡肋,毕竟在上述情景下大多数人其实都会选择快速设置面板来完成网络连通性设置。但在一些对网络条件要求严格、需要我们决定网络连接类型的情况下,如网盘备份、游戏更新等,直接在应用内弹出的设置面板其实也是可以让我们的操作更加方便省事一点的。
不过我们建议厂商用好这个 API 还有另一层更加重要的原因,也就是接下来将要介绍的音量调节。
更方便的音量调节方式
媒体、通话、闹铃、通知……我们对移动设备的音量调节需求丝毫不输电脑,但早年不少学习、模仿 iOS 的定制 UI 在音量调节这件事情上也基本照抄,音量调节功能在近两年才得到足够的重视。
而在这一点上,原生 Android 的做法尤其值得借鉴。
一方面,当你按下音量调节键时,默认调节的音量就是当前正在播放的音量。
如果你正在刷 YouTube,此时调节的应该是媒体音量;如果你的闹钟响了,此时调节的应该是闹钟音量;如果有人给你打电话,此时调节的应该是铃声音量……在原生 Android 上我们几乎不会遇到在错的时间点开错的视频、按下音量减却发现调节的是铃声音量而不是媒体播放音量的尴尬。
此外 Android 系统还会根据当前的设备连接状态进一步做出决定,当手机接入了多个蓝牙设备时,按下音量键优先调节的一定是正在播放而非闲置不用的那个蓝牙设备的播放音量。
方便快速的音量调节功能
另一方面,基于上面提到的设置面板 API,Android 10 还进一步引入了音量调节扩展面板。调节音量时点击控制条下方的设置按钮即可展开扩展面板,这个面板可以被看作是「系统设置 > 声音」界面的「微缩版」,允许我们直接对各类音频输出的音量大小进行单独调节。
最后,针对上面提到的多个音频播放设备连接的情况,我们也可以直接在这个扩展面板中自由切换用于音频输出的设备。
更懂使用场景的屏幕旋转
Android 9 Pie 发布的同时,Android 用户所熟悉的「三大金刚」被返回和同时拥有主屏(Home)、最近任务概览(Recents)两种功能的「小药丸」所取代,但彼时屏幕底部的导航栏按键区域依然存在,Google 于是灵机一动,将最近任务概览按钮留下来的空位留给了一个新功能——强制转屏。
这里的考虑很简单,Android 系统默认的屏幕自动旋转功能其实是不怎么「通人性」的:为了避免侧躺玩手机屏幕内容自动横屏影响观看体验,很多人往往会关闭手机的自动旋转功能;但在日常使用需要查看照片、电影时,我们就必须打开快速设置面板手动打开「自动旋转」了。
这个开关其实非常不灵活
强制转屏功能索性把「转不转」的权利完全交给了那些常年关闭「自动旋转」的用户——当系统获取到来自陀螺仪等传感器的手机旋转数据后,Android 系统会在屏幕底部显示一个可以用于强制切换横、竖屏显示的按钮。
屏幕方向发生变化时的强制转屏图标
如果你只是睡前玩玩手机那就不必理会这个按钮,数秒后它便会自动消失;如果你确实是一个偶尔需要横屏显示内容的「反自动旋转功能」用户,点击这个按钮又能免除一次下拉打开快速设置面板找开关的麻烦。
在最新的 Android 10 中,强制旋转按钮从底部导航栏迁移到了屏幕下方角落,样式也从矩形按钮变成了圆形图标,但实用性依旧。而国内的定制 UI 由于此前采用的全面屏手势方案大多不包含屏幕导航栏设计,这个强制转屏按钮也就没了踪影。
自动亮度调节的学习能力
iOS 用户转战 Android 阵营后常常怀念的东西除了 iMessage,还有 iOS 出色的自动亮度调节——Android 这边和「通情达理」毫不沾边的自动亮度调节已经被用户吐槽多年了。
在 Android 9 之前,自动亮度调节的简要工作流程应该是:
手机根据实际环境光情况和手机厂商内置的亮度调节曲线自动将屏幕亮度调节到特定数值
用户根据实际情况:将滑块向左拉,产生一个负比例系数,让屏幕亮度比厂商的预设值更低(觉得手机屏幕太亮了)将滑块向右拉,产生一个正比例系数,让屏幕亮度比厂商的预设值更高(觉得手机屏幕还不够亮)
解构这个流程不难发现,这种自动亮度调节机制势必会带来两个问题:一方面厂商内置的亮度调节曲线本身并不科学,欠缺调校;另一方面我们的亮度选择偏好(拖动滑块的行为)并不能得到学习和记忆。
这两个问题叠加起来就是堪称「灾难级」的自动亮度体验了——厂商内置的亮度调节曲线并不能给到我们想要的结果,由于早年机器学习在移动设备上并未得到广泛应用,Android 系统也无法记住我们的实际亮度偏好,每次自动亮度出问题时,我们都需要手动拉一下滑块。
而优秀的自动亮度调节机制是很少需要、甚至不需要我们进行手动干预的。为了改善 Android 平台的亮度调节体验,Google 在 Android 9 中针对上面的自动亮度问题做了两方面改进:
将亮度控制滑块所代表的控制目标由全局调节系数更改为绝对屏幕亮度
借助本地机器学习对亮度映射关系进行个性化调优
第一点将自动亮度开启前提下的绝对亮度控制权完全交给了用户,举个例子,当系统觉得与当前环境匹配的绝对亮度是最高亮度的 70% 时:在 Android 9 之前的版本中,我们将亮度滑块拉到最右侧能够获取到的亮度是70%*正比例系数;在 Android 9 之后的版本中,我们将亮度滑块拉到最右侧能够获取到的亮度就是 100%。
第二点则让 Android 系统记住了特定使用场景下用户的亮度选择倾向:玩游戏时喜欢把屏幕亮度调到最高,厂商预置的最低亮度对你而言有些太暗了……对这些使用习惯的记忆配合上面提到的对绝对亮度的直接操控,我们手动操作亮度控制滑块的次数理论上来说会随着使用时间的增加而减少。
奇怪的是后续版本这个功能又被翻译成了「自动调节亮度」
说了这么多,你会发现即便厂商给到的预置亮度调节曲线不太合理,Android 9 的自动亮度学习特性也能随着每一次对屏幕绝对亮度的调节,拥有「越用越懂你」的自动亮度调节能力。所幸在今年发布的国产旗舰手机中我们已经看到了基于这种思路的自动亮度调节算法,如 Find X2、小米 10 系列等,各家的机器学习算法好不好用尚且有待时间验证,但这种调校方向和解决思路是绝对值得借鉴的。
更灵活的通知交互方式
尽管市面上大部分机型的底层版本都已经升级到了 Android 10,Google 自 8.0 以来为 Android 系统引入的通知延后功能在不少 OEM 厂商的定制系统中依然缺席。
通知延后并不是一个无关紧要的小功能,因此当 Google 在 Android 11 DP2 中将其移除后立即招来了开发者和用户的不满,并且在随后发布的 Android DP3 中又将这个特性以开关的形式加了回去。
在原生 Android 8.0+ 版本的设备上,我们可以对一条应用所发出的通知进行延后处理,只需在对应通知上向左或向右轻扫,然后点击出现的时钟