暗黑适配方案比较
大部分 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 适配暗黑
此方案的适配与屏幕大小适配方案一样,主要特点如下:
- 系统支持,系统要求 Android 10 及以上,低版本不支持。
- color 不能硬编码,需按功能或作用命名,不能按色值命名
- 灵活,但缺乏管理,按资源类别分散
- 多Lib库情况下,不适合复用,只能通过依赖复用,违背组件库设计原则
方案二:主题适配暗黑
此方案主要特点如下:
- 通过自定义属性,定义一套主题样式属性,统一管理,所有 Lib 库方便复用
- 全版本支持:
- Android 10及以上,通过 night-qualified 自动切换
- 低版本,通过手动切换主题,context.setTheme(R.style.Theme_LYDemo)
总结
从统一管理和 Lib 库复用的角度考虑,应该使用方案二,官方推荐的方案也是方案二。