如题,这篇文章我讲的非常通俗易懂,是为了方便小白能够大致了解这个框架的粗略实现过程,大神们请绕道哦~
最近在做夜间模式,引用了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> {