Android Skinner

About this Project

An android skin change framework

Core Ability

Load custom ui style from skin package

Steps for Integration

1. Dependency
api("io.github.hellogoogle2000:android-skinner:1.0.0")
2. Init

suggest calling after Application#onCreate

SkinnerKit.init(application)
3. Install Skin Package

call before apply this skin

SkinnerKit.installSkin(assets.open("skin.apk"), "skinner")
4. Install SkinnerInflaterFactory

suggest calling before Activity#onCreate

SkinnerKit.installSkinnerFactory(activity)
5. Load Skin

recall Activity#setContentView to take effect

SkinnerKit.loadSkin("skinner")
5. Switch Skin Mode

recall Activity#setContentView to take effect

SkinnerKit.setSkinMode(SkinnerValues.SKIN_MODE_DARK)
6. Restore to Default

recall Activity#setContentView to take effect

SkinnerKit.loadSkin(SkinnerValues.SKIN_NAME_DEFAULT)
SkinnerKit.setSkinMode(SkinnerValues.SKIN_MODE_DEFAULT)
7. Apply to LayoutXml
  • add skin namespace
  • specify provider
  • dynamic resource should named end with _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>
8. Register Custom View Provider

due to android technical limit

skinner only support three skinnable attribute by default

background, src, and textColor

you can create your own provider to introduce more customization

take a reference to BasicAttributeSkinner, that work is just simple

object CustomAttributeSkinner : BaseSkinnerProvider()
SkinnerProvidersFactory.registerViewProvider(CustomAttributeSkinner)

Make Skin Package

1. Create Skin Package Project

create an empty android application project

keep application id same with the origin one

if your skin have more than one mode, create a mode folder additionally

mode folder named as res-mode, corresponding resource named as xxx_skinnable_mode

在这里插入图片描述
在这里插入图片描述

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")
    }
}
2. Build Skin Package

just like build an android apk

run Build - Build APK, then you will get a skin apk in build/output directory

install it to your application spaces as mentioned above

End

for more detailed confusion, take a look at sample app

this is actually a simple and concise library, I believe you can do it

Good Job, Baby !

相关推荐

最近更新

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

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

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

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

    2024-07-11 23:02:04       69 阅读

热门阅读

  1. 一句话回答的前端面试题

    2024-07-11 23:02:04       22 阅读
  2. 使用Python进行计算机视觉

    2024-07-11 23:02:04       20 阅读
  3. 从零手写实现 nginx-25-directive map 条件判断指令

    2024-07-11 23:02:04       19 阅读
  4. OWASP ZAP

    OWASP ZAP

    2024-07-11 23:02:04      19 阅读
  5. 【小超嵌入式】C++实现简单计算器

    2024-07-11 23:02:04       12 阅读
  6. pom.xml中重要标签介绍

    2024-07-11 23:02:04       24 阅读
  7. 科技的成就(六十一)

    2024-07-11 23:02:04       19 阅读
  8. 全球网络战市场规模未来十年将超过万亿元

    2024-07-11 23:02:04       19 阅读
  9. 使用kubeadm重置k8s集群

    2024-07-11 23:02:04       17 阅读
  10. k8s中使用cert-manager生成自签名证书

    2024-07-11 23:02:04       18 阅读
  11. k8s中控制器DaemonSet简介及用法

    2024-07-11 23:02:04       23 阅读
  12. 使用 Python 中的 `sklearn` 库实现 KNN 分类

    2024-07-11 23:02:04       21 阅读