用一句話(huà)來(lái)說(shuō),適配深色模式的唯一的工作就是打開(kāi)你的app界面,打開(kāi)系統(tǒng)深色模式,把a(bǔ)pp圖片、資源、顏色等等,在黑色night目錄下同樣適配一套 深色模式的UI。
適配深色模式不能依賴(lài)于系統(tǒng)的強(qiáng)制反色,因?yàn)槿址瓷窃趍iui12的系統(tǒng)代碼上才有的,在miui11之中的深色模式是沒(méi)有全局反色功能的,因此App需要手動(dòng)適配深色模式
app通過(guò)資源id等方式獲取資源文件時(shí),如果在深色模式下,app會(huì)讀取對(duì)應(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 |
以此類(lèi)推,文件夾的命名規(guī)律就是中間插入: -night-
切換到深色模式時(shí),資源應(yīng)用的優(yōu)先順序:
- 應(yīng)用提供的-night資源
- 應(yīng)用設(shè)置的默認(rèn)資源(通常是亮色下的資源,也可以是應(yīng)用主動(dòng)在深色模式下設(shè)置的主題)
- 系統(tǒng)的默認(rèn)深色資源
- 系統(tǒng)默認(rèn)的亮色資源
只要night文件夾放了對(duì)應(yīng)的資源文件,系統(tǒng)開(kāi)啟深色模式設(shè)置開(kāi)關(guān)就會(huì)自動(dòng)讀取night文件夾下的圖片,night資源不會(huì)被系統(tǒng)全局反色,只有沒(méi)主動(dòng)適配的視圖布局才可能會(huì)被全局反色。
如果App因?yàn)閚ight資源數(shù)遠(yuǎn)超20個(gè),由于系統(tǒng)的代碼判斷App,不會(huì)被強(qiáng)制反色。
小技巧:對(duì)于純色圖片或圖標(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目錄下放對(duì)應(yīng)的顏色,這樣依賴(lài)系統(tǒng)讀取night資源文件來(lái)達(dá)到適配深色模式的目的