暗黑适配方案比较

大部分 App 的开发都没有统一设计规范,有很多的硬编码,导致暗黑适配成本非常高。

官方也意识到此问题,提供了 Force Dark 功能,自动转换为暗黑样式,但自动转换的方式,会有一些小瑕疵,现在普遍的方案是:混合 Force Dark 和原生适配的方案。

Your themes and styles should avoid hard-coded colors or icons intended for use under a light theme. You should use theme attributes (preferred) or night-qualified resources instead.

由上可知,原生适配的思路是:不要硬编码颜色和图标,而应该使用主题 或 night resources。

此文主要对比使用主题适配 和 night resources 适配的差异。

方案一:night resources 适配暗黑

此方案的适配与屏幕大小适配方案一样,主要特点如下:

  1. 系统支持,系统要求 Android 10 及以上,低版本不支持。
  2. color 不能硬编码,需按功能或作用命名,不能按色值命名
  3. 灵活,但缺乏管理,按资源类别分散
  4. 多Lib库情况下,不适合复用,只能通过依赖复用,违背组件库设计原则

方案二:主题适配暗黑

此方案主要特点如下:

  1. 通过自定义属性,定义一套主题样式属性,统一管理,所有 Lib 库方便复用
  2. 全版本支持:
    1. Android 10及以上,通过 night-qualified 自动切换
    2. 低版本,通过手动切换主题,context.setTheme(R.style.Theme_LYDemo)

总结

从统一管理和 Lib 库复用的角度考虑,应该使用方案二,官方推荐的方案也是方案二。

参考

  1. Dark theme
感谢您的阅读,本文由 刘阳 版权所有。如若转载,请注明出处:刘阳(https://handsomeliuyang.github.io/2021/05/17/%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93/%E6%9A%97%E9%BB%91%E9%80%82%E9%85%8D%E6%96%B9%E6%A1%88%E7%9A%84%E5%AF%B9%E6%AF%94/
基于git和markdown的文档平台
Anki助手:解决孩子复习和家长辅导的痛点