深色模式适配参考

用一句话来说,适配深色模式的唯一的工作就是打开你的app界面,打开系统深色模式,把app图片、资源、颜色等等,在黑色night目录下同样适配一套 深色模式的UI。

适配深色模式不能依赖于系统的强制反色,因为全局反色是在miui12的系统代码上才有的,在miui11之中的深色模式是没有全局反色功能的,因此App需要手动适配深色模式

app通过资源id等方式获取资源文件时,如果在深色模式下,app会读取对应-night-目录的资源文件,规律如下:

普通模式 深色模式
values values-night
color color-night
drawable drawable-night
drawable-nxdpi drawable-night-nxdpi
drawable-xhdpi drawable-night-xhdpi
drawable-xxhdpi drawable-night-xxhdpi
drawable-xxxhdpi drawable-night-xxxhdpi
values-nhdpi values-night-nhdpi

以此类推,文件夹的命名规律就是中间插入: -night-

切换到深色模式时,资源应用的优先顺序:

  1. 应用提供的-night资源
  2. 应用设置的默认资源(通常是亮色下的资源,也可以是应用主动在深色模式下设置的主题)
  3. 系统的默认深色资源
  4. 系统默认的亮色资源

只要night文件夹放了对应的资源文件,系统开启深色模式设置开关就会自动读取night文件夹下的图片,night资源不会被系统全局反色,只有没主动适配的视图布局才可能会被全局反色。

如果App因为night资源数远超20个,由于系统的代码判断App,不会被强制反色。

小技巧:对于纯色图片或图标,如果不想让UI切两套图片(黑色调和白色调)放到不同的资源文件夹下,如果是xml文件,可以使用着色器,不同的控件需要使用不同的着色器,如下:

属性 深色模式适配方法
Botton BottonTint="@color/xxx"
ImageView tint="@color/xxx"
background backgroundTint="@color/xxx"
drawableLeft drawableTint="@color/xxx"

可以在night目录下放对应的颜色,这样依赖系统读取night资源文件来达到适配深色模式的目的

MIUI Android Q 深色模式适配指南

你可能感兴趣的:(深色模式适配参考)