Android快速換膚之App內(nèi)部換膚

目錄

原理


添加多套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。

個(gè)人技術(shù)博客:https://myml666.github.io

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評(píng)論 25 709
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    wgl0419閱讀 6,593評(píng)論 1 9
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,876評(píng)論 2 45
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,000評(píng)論 2 59
  • 今天是12月21,冬至日。5點(diǎn)半起床學(xué)了半個(gè)小時(shí)的西班牙語(yǔ)之后,我又看了一會(huì)書,等到天沒(méi)那么黑之后,就出去跑步。冬...
    zoebabe閱讀 1,221評(píng)論 2 7

友情鏈接更多精彩內(nèi)容