Android夜間模式技術選型及快速開發-Android-skin-support

目前主流的Android夜間模式有兩種

第一種

官方api模式,參考
侷限性在於每次切換夜間模式,棧中所有的Activity都會重啓,相應的有很多保存、恢復操作。實現較爲麻煩,不適合加入已具備繁重業務邏輯的項目中。

第二種

Android-skin-support

相比於官方api,Android-skin-support庫不需要重啓Activity,使用插件化方案更新資源


本文接下來會主要介紹Android-skin-support插件式換膚的用法

step1.在本地工程下新建module-Android Lib

相應的包名應注意修改爲***.night
例如:

主包名: 		com.ximsfei.skindemo
夜間模式包名: com.ximsfei.skindemo.night

step2.把新建的module修改成可打包的application

修改module下的build.gradle

apply plugin: 'com.android.library'
修改爲
apply plugin: 'com.android.application'

step3.將需要換膚的資源放到res目錄下(同名資源)

包含color、drawable、mipmap等資源
例如 背景顏色爲

app/***/colors.xml

<color name="background">#ffffff</color>

那麼夜間模式你可以在skin-night工程中設置

night/***/colors.xml

<color name="background">#000000</color>

step4.將新建的module打包apk

在AndroidStudio右側gradle展開後選取night->Tasks->build->assembleRelease

將打包生成的apk文件, 重命名爲’xxx.skin’, 防止apk結尾的文件造成混淆.

step5.加載皮膚插件

加載插件式皮膚, 將皮膚包放到assets/skins目錄下
CommonsLibrary/build.gradle(或主Module)中加入

//皮膚 夜間模式
    api 'skin.support:skin-support:3.1.1'                   // skin-support 基礎控件支持
    api 'skin.support:skin-support-design:3.1.1'            // skin-support-design material design 控件支持[可選]
    api 'skin.support:skin-support-cardview:3.1.1'          // skin-support-cardview CardView 控件支持[可選]
    api 'skin.support:skin-support-constraint-layout:3.1.1' // skin-support-constraint-layout ConstraintLayout 控件支持[可選]

Application初始化中加入皮膚插件初始化

 SkinCompatManager.withoutActivity(this)                         // 基礎控件換膚初始化
                .addInflater(new SkinMaterialViewInflater())            // material design 控件換膚初始化[可選]
                .addInflater(new SkinConstraintViewInflater())          // ConstraintLayout 控件換膚初始化[可選]
                .addInflater(new SkinCardViewInflater())                // CardView v7 控件換膚初始化[可選]
                .setSkinStatusBarColorEnable(false)                     // 關閉狀態欄換膚,默認打開[可選]
                .setSkinWindowBackgroundEnable(false)                   // 關閉windowBackground換膚,默認打開[可選]
                .loadSkin();

並提供夜間模式的切換方法

  public void changeSkin(boolean isNight) {
        if (isNight) {
            // 指定皮膚插件
            SkinCompatManager.getInstance().loadSkin("night.skin", SkinCompatManager.SKIN_LOADER_STRATEGY_ASSETS);
        } else {
            // 恢復應用默認皮膚
            SkinCompatManager.getInstance().restoreDefaultTheme();
        }
    }
發佈了29 篇原創文章 · 獲贊 28 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章