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

引入依赖
api("io.github.hellogoogle2000:android-skinner:1.0.0")
初始化Skinner

在所有功能前调用即可,建议在Application中初始化

SkinnerKit.init(application)
安装皮肤包

在应用该皮肤包前安装即可,建议预安装,或应用皮肤前安装

SkinnerKit.installSkin(assets.open("skin.apk"), "skinner")
安装SkinnerInflaterFactory

在Activity应用皮肤前安装即可,建议在Activity#onCreate前安装

SkinnerKit.installSkinnerFactory(this)
加载皮肤
SkinnerKit.loadSkin("skinner")

加载后重新调用setContentView生效,不需要重启Activity或应用

如果是继承自SkinnerCompatActivity,直接调用reloadContentView方法生效

reloadContentView()
切换模式
SkinnerKit.setSkinMode(SkinnerValues.SKIN_MODE_DARK)

同样需要重新调用setContentView生效

恢复到默认皮肤和模式
SkinnerKit.loadSkin(SkinnerValues.SKIN_NAME_DEFAULT)
SkinnerKit.setSkinMode(SkinnerValues.SKIN_MODE_DEFAULT)
应用到XmlLayout

包括以下工作

  • 通过xmlns:skin引入SkinnerNamespace
  • 通过skin:provider指定换肤使用的Provider
  • 需要支持换肤的资源名称以_skinnable结束
<?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中进行配置

并且,皮肤包的包名,要和原安装包保持一致

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

相关推荐

  1. Unity定义框架开发

    2024-07-11 03:18:04       33 阅读
  2. Django框架模板位置(默认&定义

    2024-07-11 03:18:04       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 03:18:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 03:18:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 03:18:04       58 阅读
  4. Python语言-面向对象

    2024-07-11 03:18:04       69 阅读

热门阅读

  1. Redis 数据过期及淘汰策略

    2024-07-11 03:18:04       21 阅读
  2. VSCode 推荐插件列表(都安装到Remote SSH上)

    2024-07-11 03:18:04       18 阅读
  3. bug——多重定义

    2024-07-11 03:18:04       23 阅读
  4. Tkinter 部件使用教程

    2024-07-11 03:18:04       20 阅读
  5. ASPICE评估是汽车软件质量的可靠保障

    2024-07-11 03:18:04       21 阅读
  6. AI绘画好学吗?解锁创意无限的艺术新纪元

    2024-07-11 03:18:04       24 阅读
  7. P1255 数楼梯【递推+大数】

    2024-07-11 03:18:04       20 阅读
  8. 中断相关知识

    2024-07-11 03:18:04       21 阅读
  9. 春风得意特斯拉(六)

    2024-07-11 03:18:04       22 阅读
  10. C语言10 函数

    2024-07-11 03:18:04       21 阅读
  11. 在Qt中使用C++编程与传统C++编程的区别

    2024-07-11 03:18:04       17 阅读
  12. 【Android】【多屏】多屏异显异触调试技巧总结

    2024-07-11 03:18:04       23 阅读