我们的第一篇文章中,详细介绍了我们从开发中的Android Q版本中发现的更改,我们简要介绍了所有人都兴奋的黑暗模式。概括地说,可以通过“显示设置”中新的“暗模式”选项启用Google在Android Q中内置的暗模式。暗模式可以始终关闭,始终打开,也可以在晚上自动启用,在早晨禁用。深色模式以SystemUI(音量面板,电源菜单,Quick Settings面板,通知),Settings应用程序和框架(重点色等)为主题。
Google不只是希望系统元素以深色为主题。他们还努力确保当用户按下开关时,所有第一方应用程序都支持暗模式。诸如Messages,Phone,Contacts,News,Play游戏,YouTube,Maps等Google应用程序已通过面向用户的黑暗模式切换进行了更新,而其他应用程序如Google Chrome浏览器仍在解决Google I / O 2019之前的任何麻烦。 Google还开始鼓励第三方应用程序开发人员拥抱黑暗主题 在公司的应用中使用,因为该公司承认电池寿命长(至少在配备OLED显示屏的智能手机上)。
为了帮助开发人员通过支持Android Q的暗模式更新其应用,Google提供了一个新的开发者选项,该选项似乎强制所有应用更改为暗模式。此选项不适用于想要使所有事物都处于黑暗模式的用户,因为对于所有没有本机黑暗模式的应用程序,系统很难选择正确的颜色。幸运的是,Google已经为支持深色模式的应用程序奠定了基础,并且即使应用程序没有面向用户的深色模式切换功能,也已经有许多应用程序启用了Android Q的覆盖深色模式选项后看起来还不错。这是来自24个不同应用的屏幕截图的集合,显示了使用Android Q的替代黑暗模式切换将黑暗模式强加于他们时的外观。并非每个应用程序都会看起来不错,如下文所示。
在Android Q中实现暗模式
在API级别8(Android 2.2 Froyo)中,Google引入了-night限定符来获取资源。应用程序开发人员可以使用UiModeManager中的setNightMode在白天和夜晚模式之间切换。但是,如果设备处于API级别22或更低级别,则setNightMode要求设备处于汽车模式或对接模式。AppCompat v23.2引入了DayNight实现,使Reddit客户端等应用可以使用AppCompatDeletegate.setDefaultNightMode()根据一天中的时间自动在白天和夜晚的主题之间进行切换。API级别28(Android 9 Pie)使MODE_NIGHT_FOLLOW_SYSTEM(默认值setDefaultNightMode())遵循“设置”->“开发人员选项”->“夜间模式”中用户定义的系统设置。Google正在努力对AppCompat中的DayNight API的改进,尤其是在诸如WebView问题之类的“经常遇到的问题”方面。最后,Google已启用夜间模式检测功能,并 在Android Q框架中未经MODIFY_DAY_NIGHT_MODE签名/特权许可而阻止了应用程序。后者的更改意味着应用程序无法再修改系统范围内的夜间模式,这是导致最近的Messages错误使Android Pie中的用户困惑的原因。
更新: 对AndroidX支持库的更新将使开发人员在设备进入省电模式时更轻松地在其应用中自动启用暗模式。
在Android Q中强制使用黑暗模式
Snapchat,Slack,AOSP电子邮件,AOSP消息传递,AOSP拨号程序等应用程序都有-night资源限定符,即使它们没有为用户提供使用夜间模式的应用程序的方式。开启或关闭Android Q的覆盖深色主题后,其他没有硬编码的夜间资源限定符的应用(例如Facebook和Instagram)看起来可能会或可能不会很好。Instagram看起来不错,而Facebook需要做很多工作。根据我的测试,覆盖夜间模式开发人员选项与“辅助功能设置”中的颜色反转非常不同-也许Google打算使用此功能来帮助开发人员在进行Android Q开发人员预览时为其应用创建暗模式。不过,直到发布Android Q的源代码或Google发布该功能的文档之前,我们才确切知道此功能的工作方式。
在Google的克里斯·班内斯(Chris Banes)和艾伦·维维雷特(Alan Viverette)提出的“ 像素色彩成本 ”演讲中,两人鼓励开发人员通过以下方式实现深色主题:
在AppCompat中使用DayNight API。库存小部件会自动响应夜间模式下的更改,或者您也可以在应用程序中添加一个开关。
通过调用getTheme()。applyStyle()在运行时动态应用覆盖主题。更多信息可以在这个早期的谈话中找到 这里。
构建您的应用程序以依赖使用主题属性,例如colorForeground,colorControlNormal,colorAccent等。
为您的资源添加-night限定词。-night限定词应用于难以提取主题颜色的资源。
启用颜色反转模式(“设置”->“颜色”->“颜色反转”)可以快速了解您的应用在黑暗模式下的外观。如果您想使用反色来制作应用程序的屏幕截图,则应注意,颜色反转不会显示在屏幕截图中。
在发布时,Android Q的暗模式将扩展到第一方Google应用,但我们希望第三方应用能够将暗主题快速应用到他们的应用中。此外,我们希望看到当用户启用系统范围的设置时,更多应用会自动更改为夜间主题。目前,我看到的唯一启用Android Q系统范围内的黑暗模式时自动更改主题的应用程序就是Google通讯录。我们将看到发布Android Q的几个月后情况如何,但对所有正在阅读此书的开发人员来说:拥抱阴暗面!