十分钟带你看懂Android-skin-support换肤框架,完美实现夜间模式

本文详细介绍了Android-skin-support框架如何实现应用内换肤,特别是夜间模式。通过SkinCompatManager和SkinLoadTask,以及观察者模式,实现在用户点击换肤后,通知所有Activity和View更新UI。同时讲解了标准View和自定义换肤View的映射,以及自定义View支持换肤的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,这篇文章我讲的非常通俗易懂,是为了方便小白能够大致了解这个框架的粗略实现过程,大神们请绕道哦~

  最近在做夜间模式,引用了ximsfei大神的Android-skin-support换肤框架来实现。该框架的整体的实现思想是:自定义ActivityLifecycle来记录Activities的生命周期,在每一个Activity执行完onResume()后,将Activity和LazySkinObserver接口绑定,在用户点击换肤操作时,通过接口回调来通知每一个Activity的换肤。
  这篇文章以“应用内换肤”方式为例来讲解Android-skin-support换肤框架的实现。

转载请注明:https://www.jianshu.com/p/78e75dba9e55

使用方法:

  在Application中初始化SkinCompatManager

SkinCompatManager.withoutActivity(this)
                // 自定义加载策略,指定SDCard路径
                .addStrategy(new CustomSDCardLoader())
                // material design
                .addInflater(new SkinMaterialViewInflater())
                // ConstraintLayout
                .addInflater(new SkinConstraintViewInflater())
                // CardView v7
                .addInflater(new SkinCardViewInflater())
                // 关闭状态栏换肤
                .setSkinStatusBarColorEnable(false)
                // 关闭windowBackground换肤
                .setSkinWindowBackgroundEnable(false)
                .loadSkin();

  用户点击换肤操作后,我们只需调用以下方法,一句话即可实现换肤:

SkinCompatManager.getInstance().loadSkin("night", null, SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);
换肤流程:
1、开启SkinLoadTask:

  当调用了loadSkin()方法后,SkinCompatManager会开启一个SkinLoadTask,该方法的doInBackground()会获取皮肤包名字,然后在onPostExecute()方法中,将皮肤名写入SharePreference,同时调用notifyUpdateSkin()开始换肤。具体可以看SkinCompatManager中如下几段核心代码:

    private class SkinLoadTask extends AsyncTask<String, Void, String> {
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值