# Skinnable **Repository Path**: 429835306/Skinnable ## Basic Information - **Project Name**: Skinnable - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-25 - **Last Updated**: 2023-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Skinnable 东方证券Android换肤Kotlin实现方案 # 使用方法 ## 1.引用Library ``` groovy dependencies { implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.7.10' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.github.Orientsec.Skinnable:SkinLibrary:1.0.0' } ``` ## 2.添加support仓库 ``` groovy dependencies { implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.7.10' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.github.Orientsec.Skinnable:SkinLibrary:1.0.0' // 支持appcompat implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'com.github.Orientsec.Skinnable:SkinSupportCompat:1.0.0' // 支持material View implementation 'com.google.android.material:material:1.6.1' implementation 'com.github.Orientsec.Skinnable:SkinSupportDesign:1.0.0' // 支持ConstraintLayout implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'com.github.Orientsec.Skinnable:SkinSupportConstraintLayout:1.0.0' } ``` ## 在Application.onCreate()方法中加入以下初始化代码 ``` kotlin SkinConfig.builder() .addInflater(SkinAppCompatViewFactory()) .addInflater(SkinConstraintViewFactory()) .addInflater(SkinMaterialViewFactory()) .build() .initManager(this) .loadSkin() ``` 在支持换肤的View布局中加入 ``` xml app:skinnable="true" ``` # 换肤方法 ## 加载插件皮肤库 ``` kotlin // 指定皮肤插件 SkinManager.loadSkin(SkinStrategy.Assets("skin.night")) // 后缀加载 SkinManager.loadSkin(SkinStrategy.BuildIn("night")) // 前缀加载 SkinManager.loadSkin(SkinStrategy.PrefixBuildIn("night")) // 恢复应用默认皮肤 SkinManager.restoreDefaultSkin(); ``` ## 应用内换肤: 应用内换肤,皮肤名为: night; 新增需要换肤的资源添加后缀或者前缀。 需要换肤的资源为R.color.windowBackgroundColor, 添加对应资源R.color.windowBackgroundColor_night。 加载应用内皮肤: ``` kotlin // 后缀加载 SkinManager.loadSkin(SkinStrategy.BuildIn("night")) // 前缀加载 SkinManager.loadSkin(SkinStrategy.PrefixBuildIn("night")) ``` 推荐将应用内换肤相关的皮肤资源放到单独的目录中 注: 如果使用这种方式来增加换肤资源,记得在build.gradle 中配置一下这个资源目录 ``` kotlin sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res-night'] } } ``` ## 插件式换肤: ### 新建Android application工程,皮肤工程包名不能和宿主应用包名相同. ### 将需要换肤的资源放到res目录下(同名资源) 例如 APK中窗口背景颜色为 colors.xml ``` xml #ffffff ``` 那么夜间模式你可以在skin-night工程中设置 colors.xml ``` xml #000000 ``` ### 打包生成apk, 即为皮肤包 将打包生成的apk文件, 重命名为'xxx.skin', 防止apk结尾的文件造成混淆. ### 加载皮肤插件 加载插件式皮肤, 将皮肤包放到assets/skins目录下 ``` kotlin // 指定皮肤插件 SkinManager.loadSkin(SkinStrategy.Assets("skin.night")) ```