用一句話來說严卖,適配深色模式的唯一的工作就是打開你的app界面席舍,打開系統(tǒng)深色模式,把app圖片哮笆、資源俺亮、顏色等等,在黑色night目錄下同樣適配一套 深色模式的UI疟呐。
適配深色模式不能依賴于系統(tǒng)的強制反色,因為全局反色是在miui12的系統(tǒng)代碼上才有的东且,在miui11之中的深色模式是沒有全局反色功能的启具,因此App需要手動適配深色模式
app通過資源id等方式獲取資源文件時,如果在深色模式下珊泳,app會讀取對應(yīng)-night-目錄的資源文件鲁冯,規(guī)律如下:
普通模式 | 深色模式 |
---|---|
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 |
以此類推拷沸,文件夾的命名規(guī)律就是中間插入: -night-
切換到深色模式時,資源應(yīng)用的優(yōu)先順序:
- 應(yīng)用提供的-night資源
- 應(yīng)用設(shè)置的默認(rèn)資源(通常是亮色下的資源薯演,也可以是應(yīng)用主動在深色模式下設(shè)置的主題)
- 系統(tǒng)的默認(rèn)深色資源
- 系統(tǒng)默認(rèn)的亮色資源
只要night文件夾放了對應(yīng)的資源文件撞芍,系統(tǒng)開啟深色模式設(shè)置開關(guān)就會自動讀取night文件夾下的圖片,night資源不會被系統(tǒng)全局反色跨扮,只有沒主動適配的視圖布局才可能會被全局反色序无。
如果App因為night資源數(shù)遠(yuǎn)超20個,由于系統(tǒng)的代碼判斷App衡创,不會被強制反色帝嗡。
小技巧:對于純色圖片或圖標(biāo),如果不想讓UI切兩套圖片(黑色調(diào)和白色調(diào))放到不同的資源文件夾下璃氢,如果是xml文件哟玷,可以使用著色器,不同的控件需要使用不同的著色器一也,如下:
屬性 | 深色模式適配方法 |
---|---|
Botton | BottonTint="@color/xxx" |
ImageView | tint="@color/xxx" |
background | backgroundTint="@color/xxx" |
drawableLeft | drawableTint="@color/xxx" |
可以在night目錄下放對應(yīng)的顏色巢寡,這樣依賴系統(tǒng)讀取night資源文件來達到適配深色模式的目的