目錄

原理

添加多套values和drawable文件,通過(guò)Android-skin-support框架動(dòng)態(tài)的替換來(lái)實(shí)現(xiàn)切換主題的效果。
實(shí)現(xiàn)步驟
- 添加依賴
implementation 'skin.support:skin-support:3.1.0-beta1' // skin-support 基礎(chǔ)控件支持
implementation 'skin.support:skin-support-design:3.1.0-beta1' // skin-support-design material design 控件支持[可選]
implementation 'skin.support:skin-support-cardview:3.1.0-beta1' // skin-support-cardview CardView 控件支持[可選]
implementation 'skin.support:skin-support-constraint-layout:3.1.0-beta1' // skin-support-constraint-layout ConstraintLayout 控件支持[可選]
- 創(chuàng)建MyApplication類在onCreate方法中進(jìn)行初始化
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SkinCompatManager.withoutActivity(this) // 基礎(chǔ)控件換膚初始化
.addInflater(new SkinMaterialViewInflater()) // material design 控件換膚初始化[可選]
.addInflater(new SkinCardViewInflater()) // CardView v7 控件換膚初始化[可選]
.setSkinStatusBarColorEnable(true) //切換狀態(tài)欄顏色
// .setSkinStatusBarColorEnable(false) // 關(guān)閉狀態(tài)欄換膚,默認(rèn)打開(kāi)[可選]
// .setSkinWindowBackgroundEnable(false) // 關(guān)閉windowBackground換膚,默認(rèn)打開(kāi)[可選]
.loadSkin();
}
}
- 添加皮膚(例如皮膚名為night則需要?jiǎng)?chuàng)建res-night文件夾來(lái)存放對(duì)應(yīng)的資源文件,然后需要在app的gradle文件中添加如下代碼)
sourceSets {main {res.srcDirs = ['src/main/res', 'src/main/res-night']}}
同時(shí)需要將對(duì)應(yīng)的資源文件加上_night后綴


-
然后將控件的屬性設(shè)置為引用資源的方式
- 然后在代碼中只需要執(zhí)行一行代碼即可實(shí)現(xiàn)換膚
SkinCompatManager.getInstance().restoreDefaultTheme();//恢復(fù)默認(rèn)皮膚
SkinCompatManager.getInstance().loadSkin("night", null, SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);//切換皮膚名為night的皮膚
實(shí)例演示
這是我在學(xué)習(xí)換皮膚時(shí)做的一個(gè)案例,在這將它分享出來(lái)https://github.com/myml666/AndroidSkinDemo。

