【Android】自定义换肤框架05之Skinner框架集成

引入依赖
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教程到此结束啦,祝大家工作顺利,学习进步,心情愉悦!

相关推荐
大白要努力!6 分钟前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
天空中的野鸟1 小时前
Android音频采集
android·音视频
小白也想学C2 小时前
Android 功耗分析(底层篇)
android·功耗
曙曙学编程2 小时前
初级数据结构——树
android·java·数据结构
闲暇部落4 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
诸神黄昏EX6 小时前
Android 分区相关介绍
android
大白要努力!7 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Estar.Lee7 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
Winston Wood8 小时前
Perfetto学习大全
android·性能优化·perfetto
Dnelic-11 小时前
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
android·junit·单元测试·android studio·自学笔记