1、封装插件化换肤的核心代码
2、兼容Android9.0以上版本
3、详细介绍参考博客:https://blog.csdn.net/u013347784/article/details/122713344
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
...
implementation 'com.github.ZS-ZhangsShun:EasySkinSwitch:1.0.0'
}
SkinManager.init(this)
/**
* 自定义view以实现换肤功能
*/
class SkinFloatActionView : FloatingActionButton, SkinViewSupportInter {
var bgTintColorId: Int = 0
constructor(context: Context) : this(context, null) {
}
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) {
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
) {
val obtainStyledAttributes =
context.obtainStyledAttributes(attrs, R.styleable.FloatingActionButton, defStyleAttr, 0)
bgTintColorId =
obtainStyledAttributes.getResourceId(R.styleable.FloatingActionButton_backgroundTint, 0)
}
override fun applySkin() {
if (bgTintColorId != 0) {
backgroundTintList = ResourcesManager.getColorStateList(bgTintColorId)
}
}
}
状态栏的颜色单独定义到colors.xml文件中,换肤时,单独调用一下状态栏的颜色设置即可
建议在项目的BaseActivity的onCreate方法中调用库中的SkinThemeUtils.updateStatusBarColor方法如下:
(R.color.status_bar 需要开发者自定义创建)
/**
* 基类Activity 统一设置主题啥的
*/
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
SkinThemeUtils.updateStatusBarColor(this, R.color.status_bar)
}
}
例如,app工程中我们主页底部tab的图标和颜色都是根据用户点击来动态设置的,这里可以这样处理
a.设置Tab的颜色和图标时用使用库中封装好的ResourcesManager来获取资源id对应的值
ResourcesManager.getColor(xxx)
ResourcesManager.getDrawable(xxx)
b.当前所在的Activity实现SkinViewSupportInter接口,实现接口中的applySkin方法,当触发换肤时,回进行回调
请参考app工程中MainActivity的实现方式
//换肤
SkinManager.loadSkin(EasyVariable.mContext.cacheDir.absolutePath
+ File.separator + "skinonly.apk")
}
//恢复默认皮肤
SkinManager.loadSkin(null)
-keep com.zs.skinswitch.** {*;}