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();
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值