引入依赖
kotlin
api("io.github.hellogoogle2000:android-skinner:1.0.0")
初始化Skinner
在所有功能前调用即可,建议在Application中初始化
kotlin
SkinnerKit.init(application)
安装皮肤包
在应用该皮肤包前安装即可,建议预安装,或应用皮肤前安装
kotlin
SkinnerKit.installSkin(assets.open("skin.apk"), "skinner")
安装SkinnerInflaterFactory
在Activity应用皮肤前安装即可,建议在Activity#onCreate
前安装
kotlin
SkinnerKit.installSkinnerFactory(this)
加载皮肤
kotlin
SkinnerKit.loadSkin("skinner")
加载后重新调用setContentView生效,不需要重启Activity或应用
如果是继承自SkinnerCompatActivity,直接调用reloadContentView方法生效
kotlin
reloadContentView()
切换模式
kotlin
SkinnerKit.setSkinMode(SkinnerValues.SKIN_MODE_DARK)
同样需要重新调用setContentView生效
恢复到默认皮肤和模式
kotlin
SkinnerKit.loadSkin(SkinnerValues.SKIN_NAME_DEFAULT)
SkinnerKit.setSkinMode(SkinnerValues.SKIN_MODE_DEFAULT)
应用到XmlLayout
包括以下工作
- 通过
xmlns:skin
引入SkinnerNamespace - 通过
skin:provider
指定换肤使用的Provider - 需要支持换肤的资源名称以
_skinnable
结束
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:skin="http://schemas.android.com/skin"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_color_01_skinnable"
android:gravity="center"
android:orientation="vertical"
android:padding="30dp">
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="fitXY"
android:src="@drawable/icon_app_skinnable"
skin:provider="BasicAttributeSkinner" />
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="Hello"
android:textColor="@color/text_color_01_skinnable"
android:textSize="16dp"
skin:provider="BasicAttributeSkinner" />
</LinearLayout>
制作皮肤包
如果不需要支持不同的皮肤模式
直接将皮肤资源,保持和原安装包同名,放在res目录下
如果需要支持不同的皮肤模式
新建一个名为res-mode的资源目录,资源名称对应带上_skinnable_mode
后缀
自定义的资源目录,需要在Gradle中进行配置
并且,皮肤包的包名,要和原安装包保持一致
kotlin
plugins {
id("com.android.application")
}
android {
compileSdk = 34
defaultConfig {
namespace = "com.android.app"
applicationId = "com.android.app"
minSdk = 30
}
sourceSets {
getByName("main").res.srcDirs("src/main/res-dark")
}
}
通过Build - Build APK
生成apk格式的压缩包,即可作为皮肤包使用
源码和完整Demo
https://download.csdn.net/download/u013718730/89520283
End
Skinner教程到此结束啦,祝大家工作顺利,学习进步,心情愉悦!