[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4295":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},4295,"Android-skin-support","ximsfei\u002FAndroid-skin-support","ximsfei","Android-skin-support is an easy dynamic skin framework to use  for Android, Only one line of code to integrate it. Android 换肤框架, 极低的学习成本, 极好的用户体验. \"一行\"代码就可以实现换肤, 你值得拥有!!!","",null,"Java",6513,1098,117,102,0,1,4,66.02,"MIT License",false,"master",true,[25,26,27,28,29,30],"android","androidx","change","skin","skin-support","theme","2026-06-12 04:00:22","# Android-skin-support\n\n中文 | [In English](docs\u002FREADME.md) \n\n[![skin-support](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Frelease-v4.0.5-green.svg)](http:\u002F\u002Fjcenter.bintray.com\u002Fskin\u002Fsupport)\n![build](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fbuild-passing-green.svg)\n![license](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-mit-blue.svg)\n\n* [介绍](#介绍)\n  * [功能](#功能)\n  * [TODO](#todo)\n  * [目录结构](#目录结构)\n* [Demo](#demo)\n* [框架用法](#用法)\n  * [导入](#导入)\n  * [使用](#使用)\n    * [初始化](#在application的oncreate中初始化)\n    * [皮肤开关](#皮肤开关)\n    * [加载插件皮肤库](#加载插件皮肤库)\n    * [自定义view换肤](#自定义view换肤)\n  * [应用内换肤](#应用内换肤)\n  * [插件式换肤](#插件式换肤)\n    * [新建皮肤工程](#新建android-application工程)\n    * [添加皮肤资源](#将需要换肤的资源放到res目录下同名资源)\n    * [生成皮肤插件](#打包生成apk-即为皮肤包)\n    * [加载皮肤插件](#加载皮肤插件)\n  * [自定义加载策略](#自定义加载策略)\n    * [自定义sdcard路径](#自定义sdcard路径)\n    * [zip包中加载资源](#zip包中加载资源)\n  * [动态设置资源](#动态设置资源)\n    * [动态设置颜色](#动态设置颜色)\n    * [动态设置图片](#动态设置图片)\n  * [获取当前使用皮肤](#获取当前使用皮肤)\n* [AlertDialog换肤](docs\u002FAlertDialog.md)\n* [更新日志](docs\u002FChangeLog.md)\n  * [skin-support 更新日志](docs\u002FChangeLog.md#skin-support-基础控件-支持)\n  * [skin-support-design 更新日志](docs\u002FChangeLog.md#skin-support-design-material-design-支持)\n  * [skin-support-cardview 更新日志](docs\u002FChangeLog.md#skin-support-cardview-cardview-支持)\n  * [skin-support-constraint-layout 更新日志](docs\u002FChangeLog.md#skin-support-constraint-layout-constraintlayout-支持)\n* [第三方控件适配库](docs\u002FThirdPartSupport.md)\n  * [hdodenhof\u002FCircleImageView](docs\u002FThirdPartSupport.md#hdodenhofcircleimageview)\n  * [H07000223\u002FFlycoTabLayout](docs\u002FThirdPartSupport.md#h07000223flycotablayout)\n* [缺点](#缺点)\n* [谁在使用](#谁在使用)\n* [FAQ](docs\u002FFAQ.md)\n* [技术交流](#技术交流)\n* [LICENSE](#license-mit)\n\n## 介绍\n\nAndroid-skin-support: 一款 Android 换肤框架, 极低的学习成本, 极好的用户体验.\n\n只需要一行代码, 就可以实现换肤, 你值得拥有!!!\n\n```java\nSkinCompatManager.withoutActivity(this).loadSkin();\n```\n\n就这么简单, 你的APK已经拥有了强大的换肤功能, 当然现在是拥有了换肤功能, 别忘了[制作皮肤包](#应用内换肤).\n\n### 功能\n\n* [x] 支持布局中用到的资源换肤。\n* [x] 支持代码中设置的资源换肤。\n* [x] 默认支持大部分基础控件，Material Design换肤。\n* [x] 支持动态设置主题[颜色值](demo\u002Fskin-androidx-app\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fximsfei\u002Fskindemo\u002Fpicker\u002FColorPickerActivity.java)，支持选择sdcard上的图片作为[drawable](demo\u002Fskin-androidx-app\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fximsfei\u002Fskindemo\u002Fpicker\u002FDrawablePickerActivity.java)换肤资源。\n* [x] 支持多种加载策略([应用内](#应用内换肤)\u002F[插件式](#插件式换肤)\u002F[自定义sdcard路径](#自定义加载策略)\u002F[zip等资源](demo\u002Fskin-androidx-app\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fximsfei\u002Fskindemo\u002Floader\u002FZipSDCardLoader.java)等)。\n* [x] 资源加载优先级: 动态设置资源-加载策略中的资源-插件式换肤\u002F应用内换肤-应用资源。\n* [x] 支持定制化，选择需要的模块加载。\n* [x] 支持矢量图(vector\u002Fsvg)换肤。\n* [x] skin-support 4.0.0以上支持AndroidX，4.0.0以下支持support库\n\n*[详细内容, 请查看更新日志](docs\u002FChangeLog.md)，那里有所有功能提交记录*\n\n### TODO\n\n* [x] 解耦androidx\n* [ ] 支持原生组件换肤\n* [ ] 支持多语言。\n* [ ] 支持多字体。\n* [ ] 支持Preference。\n* [ ] skin-mobile 实现:\n  * [ ] 动态修改主题颜色值\n  * [ ] 控件使用案例\n  * [x] 关于页面\n* [ ] Wiki\n\n### 目录结构\n\n> [demo](demo)                                                        \u002F\u002F 换肤demo 集合\n\n>> [skin-sample](demo\u002Fskin-sample)([skin-app](demo\u002Fskin-app))         \u002F\u002F demo app\n\n>> [skin-night](demo\u002Fskin-night)                                      \u002F\u002F 夜间模式皮肤工程\n\n> [androidx](androidx)                                  \u002F\u002F Android 原生控件\n\n>> [skin-support](androidx／skin-support)                      \u002F\u002F 换肤框架\n\n>> [skin-support-appcompat](androidx／skin-support-appcompat)  \u002F\u002F 换肤框架, 基础控件支持\n\n>> [skin-support-cardview](androidx／skin-support-cardview)    \u002F\u002F 换肤框架, CardView 支持\n\n>> [skin-support-design](androidx／skin-support-design)        \u002F\u002F 换肤框架, Material Design 支持\n\n>> [skin-support-constraint-layout](androidx／skin-support-constraint-layout)  \u002F\u002F 换肤框架, ConstraintLayout 支持\n\n> [third-part-support](third-part-support)           \u002F\u002F 第三方控件换肤支持\n\n## Demo\n\n![default](https:\u002F\u002Fgithub.com\u002Fximsfei\u002FRes\u002Fblob\u002Fmaster\u002Fskin\u002Fpreview\u002Fdefault.png)\n![app-in](https:\u002F\u002Fgithub.com\u002Fximsfei\u002FRes\u002Fblob\u002Fmaster\u002Fskin\u002Fpreview\u002Fapp-in.png)\n![plug-in](https:\u002F\u002Fgithub.com\u002Fximsfei\u002FRes\u002Fblob\u002Fmaster\u002Fskin\u002Fpreview\u002Fplug-in.png)\n\n## 用法\n\n[最新版本选择, 请查看更新日志](docs\u002FChangeLog.md)\n\n### 导入:\n\n#### support library\n\n如果项目中还在使用support库，添加以下依赖\n```xml\nimplementation 'skin.support:skin-support:3.1.4'                   \u002F\u002F skin-support 基础控件支持\nimplementation 'skin.support:skin-support-design:3.1.4'            \u002F\u002F skin-support-design material design 控件支持[可选]\nimplementation 'skin.support:skin-support-cardview:3.1.4'          \u002F\u002F skin-support-cardview CardView 控件支持[可选]\nimplementation 'skin.support:skin-support-constraint-layout:3.1.4' \u002F\u002F skin-support-constraint-layout ConstraintLayout 控件支持[可选]\n```\n\n在Application的onCreate中初始化\n    \n```java\n@Override\npublic void onCreate() {\n    super.onCreate();\n    SkinCompatManager.withoutActivity(this)                         \u002F\u002F 基础控件换肤初始化\n            .addInflater(new SkinMaterialViewInflater())            \u002F\u002F material design 控件换肤初始化[可选]\n            .addInflater(new SkinConstraintViewInflater())          \u002F\u002F ConstraintLayout 控件换肤初始化[可选]\n            .addInflater(new SkinCardViewInflater())                \u002F\u002F CardView v7 控件换肤初始化[可选]\n            .setSkinStatusBarColorEnable(false)                     \u002F\u002F 关闭状态栏换肤，默认打开[可选]\n            .setSkinWindowBackgroundEnable(false)                   \u002F\u002F 关闭windowBackground换肤，默认打开[可选]\n            .loadSkin();\n}\n```\n\n> 如果项目中使用的Activity继承自AppCompatActivity，需要重载getDelegate()方法\n\n```java\n@NonNull\n@Override\npublic AppCompatDelegate getDelegate() {\n    return SkinAppCompatDelegateImpl.get(this, this);\n}\n```\n\n#### AndroidX support:\n\n如果项目中使用了[AndroidX](https:\u002F\u002Fdeveloper.android.google.cn\u002Ftopic\u002Flibraries\u002Fsupport-library\u002Fandroidx-overview), 添加以下依赖\n```xml\nimplementation 'skin.support:skin-support:4.0.5'                   \u002F\u002F skin-support\nimplementation 'skin.support:skin-support-appcompat:4.0.5'         \u002F\u002F skin-support 基础控件支持\nimplementation 'skin.support:skin-support-design:4.0.5'            \u002F\u002F skin-support-design material design 控件支持[可选]\nimplementation 'skin.support:skin-support-cardview:4.0.5'          \u002F\u002F skin-support-cardview CardView 控件支持[可选]\nimplementation 'skin.support:skin-support-constraint-layout:4.0.5' \u002F\u002F skin-support-constraint-layout ConstraintLayout 控件支持[可选]\n```\n\n*⚠️ 从3.x.x迁移至4.0.5+, 解耦了换肤库对appcompat包的依赖，需要新增以下代码*\n```gradle\nimplementation 'skin.support:skin-support-appcompat:4.0.5'         \u002F\u002F skin-support 基础控件支持\n```\n\n在Application的onCreate中初始化\n    \n```java\n@Override\npublic void onCreate() {\n    super.onCreate();\n    SkinCompatManager.withoutActivity(this)\n            .addInflater(new SkinAppCompatViewInflater())           \u002F\u002F 基础控件换肤初始化\n            .addInflater(new SkinMaterialViewInflater())            \u002F\u002F material design 控件换肤初始化[可选]\n            .addInflater(new SkinConstraintViewInflater())          \u002F\u002F ConstraintLayout 控件换肤初始化[可选]\n            .addInflater(new SkinCardViewInflater())                \u002F\u002F CardView v7 控件换肤初始化[可选]\n            .setSkinStatusBarColorEnable(false)                     \u002F\u002F 关闭状态栏换肤，默认打开[可选]\n            .setSkinWindowBackgroundEnable(false)                   \u002F\u002F 关闭windowBackground换肤，默认打开[可选]\n            .loadSkin();\n}\n```\n\n> 如果项目中使用的Activity继承自AppCompatActivity，需要重载getDelegate()方法\n\n```java\n@NonNull\n@Override\npublic AppCompatDelegate getDelegate() {\n    return SkinAppCompatDelegateImpl.get(this, this);\n}\n```\n\n### 使用:\n\n#### 皮肤开关\n\n如果项目中有特殊需求。例如, 股票控件: 控件颜色始终为红色或绿色, 不需要随着模式切换而换肤\n\n那么可以使用类似的方法, 直接设置drawable\n```xml\nsetBackgroundDrawable(redDrawable) \u002F\u002F 不支持换肤\nbackground=\"#ce3d3a\"\n```\n而不是使用R.drawable.red\n```xml\nsetBackgroundResource(R.drawable.red)\nbackground=\"@drawable\u002Fred\"\n```\n\n#### 加载插件皮肤库\n\n```java\n\u002F\u002F 指定皮肤插件\nSkinCompatManager.getInstance().loadSkin(\"new.skin\"[, SkinLoaderListener], int strategy);\n\n\u002F\u002F 恢复应用默认皮肤\nSkinCompatManager.getInstance().restoreDefaultTheme();\n```\n\n#### 自定义View换肤\n\n要点:\n\n1. 实现SkinCompatSupportable接口\n\n  1. applySkin方法中实现换肤操作\n\n2. 在构造方法中解析出需要换肤的resId\n\n* 自定义View可以直接继承自SkinCompatView, SkinCompatLinearLayout等已有控件\n\n  eg: [CustomTextView](demo\u002Fskin-app\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fximsfei\u002Fskindemo\u002Fwidget\u002FCustomTextView.java)\n\n* 不想继承自已有控件\n\n  eg: [CustomTextView2](demo\u002Fskin-app\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fximsfei\u002Fskindemo\u002Fwidget\u002FCustomTextView2.java)\n\n* 需要换肤自定义属性\n\n  \u002F\u002F 需要换肤AutoCompleteTextView的R.attr.popupBackground属性\n\n  eg: [SkinCompatAutoCompleteTextView](androidx\u002Fskin-support-appcompat\u002Fsrc\u002Fmain\u002Fjava\u002Fskin\u002Fsupport\u002Fwidget\u002FSkinCompatAutoCompleteTextView.java)\n\n* 需要使用第三方库控件怎么办\n\n  \u002F\u002F 需要使用https:\u002F\u002Fgithub.com\u002Fhdodenhof\u002FCircleImageView 控件, 并且要支持换肤\n\n  eg: [SkinCompatCircleImageView](third-part-support\u002Fcircleimageview\u002Fsrc\u002Fmain\u002Fjava\u002Fskin\u002Fsupport\u002Fcircleimageview\u002Fwidget\u002FSkinCompatCircleImageView.java)\n\n### 应用内换肤:\n\n应用内换肤，皮肤名为: night; 新增需要换肤的资源添加后缀或者前缀。\n\n需要换肤的资源为R.color.windowBackgroundColor, 添加对应资源R.color.windowBackgroundColor_night。\n\n加载应用内皮肤:\n```java\nSkinCompatManager.getInstance().loadSkin(\"night\", SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN); \u002F\u002F 后缀加载\nSkinCompatManager.getInstance().loadSkin(\"night\", SkinCompatManager.SKIN_LOADER_STRATEGY_PREFIX_BUILD_IN); \u002F\u002F 前缀加载\n```\n\n推荐将应用内换肤相关的皮肤资源放到单独的目录中\n\neg: [res-night](https:\u002F\u002Fgithub.com\u002Fximsfei\u002FAndroid-skin-support\u002Ftree\u002Fmaster\u002Fdemo\u002Fskin-app\u002Fsrc\u002Fmain\u002Fres-night)\n\n*注: 如果使用这种方式来增加换肤资源，记得在build.gradle 中配置一下这个资源目录 sourceSets {main {res.srcDirs = ['src\u002Fmain\u002Fres', 'src\u002Fmain\u002Fres-night']}}*\n\n\n### 插件式换肤:\n\n#### 新建Android application工程\n\n皮肤工程包名不能和宿主应用包名相同.\n\n例如:\n```xml\n宿主包名: com.ximsfei.skindemo\n夜间模式: com.ximsfei.skindemo.night\n```\n\n#### 将需要换肤的资源放到res目录下(同名资源)\n\n例如 APK中窗口背景颜色为\n\ncolors.xml\n```xml\n\u003Ccolor name=\"background\">#ffffff\u003C\u002Fcolor>\n```\n那么夜间模式你可以在skin-night工程中设置\n\ncolors.xml\n```xml\n\u003Ccolor name=\"background\">#000000\u003C\u002Fcolor>\n```\n\n#### 打包生成apk, 即为皮肤包\n\n将打包生成的apk文件, 重命名为'xxx.skin', 防止apk结尾的文件造成混淆.\n\n#### 加载皮肤插件\n\n加载插件式皮肤, 将皮肤包放到assets\u002Fskins目录下\n```java\nSkinCompatManager.getInstance().loadSkin(\"night.skin\", SkinCompatManager.SKIN_LOADER_STRATEGY_ASSETS);\n```\n\n### 自定义加载策略:\n\n#### 自定义sdcard路径\n\n继承自`SkinSDCardLoader`，通过`getSkinPath`方法指定皮肤加载路径，通过`getType`方法指定加载器type。\n\n```java\npublic class CustomSDCardLoader extends SkinSDCardLoader {\n    public static final int SKIN_LOADER_STRATEGY_SDCARD = Integer.MAX_VALUE;\n\n    @Override\n    protected String getSkinPath(Context context, String skinName) {\n        return new File(SkinFileUtils.getSkinDir(context), skinName).getAbsolutePath();\n    }\n\n    @Override\n    public int getType() {\n        return SKIN_LOADER_STRATEGY_SDCARD;\n    }\n}\n```\n\n*注: 自定义加载器type 值最好从整数最大值开始递减，框架的type值从小数开始递增，以免将来框架升级造成type 值冲突*\n\n在Application中，添加自定义加载策略:\n\n```java\nSkinCompatManager.withoutActivity(this)\n        .addStrategy(new CustomSDCardLoader());          \u002F\u002F 自定义加载策略，指定SDCard路径\n```\n\n*注: 自定义加载器必须在Application中注册，皮肤切换后，重启应用需要根据当前策略加载皮肤*\n\n使用自定义加载器加载皮肤:\n\n```java\nSkinCompatManager.getInstance().loadSkin(\"night.skin\", null, CustomSDCardLoader.SKIN_LOADER_STRATEGY_SDCARD);\n```\n\n#### zip包中加载资源\n\n继承自`SkinSDCardLoader`，在`loadSkinInBackground`方法中解压资源，在`getDrawable`等方法中返回加压后的资源。\n\n```java\npublic class ZipSDCardLoader extends SkinSDCardLoader {\n    public static final int SKIN_LOADER_STRATEGY_ZIP = Integer.MAX_VALUE - 1;\n\n    @Override\n    public String loadSkinInBackground(Context context, String skinName) {\n        \u002F\u002F TODO 解压zip包中的资源，同时可以根据skinName安装皮肤包(.skin)。\n        return super.loadSkinInBackground(context, skinName);\n    }\n\n    @Override\n    protected String getSkinPath(Context context, String skinName) {\n        \u002F\u002F TODO 返回皮肤包路径，如果自需要使用zip包，则返回\"\"\n        return new File(SkinFileUtils.getSkinDir(context), skinName).getAbsolutePath();\n    }\n\n    @Override\n    public Drawable getDrawable(Context context, String skinName, int resId) {\n        \u002F\u002F TODO 根据resId来判断是否使用zip包中的资源。\n        return super.getDrawable(context, skinName, resId);\n    }\n\n    @Override\n    public int getType() {\n        return SKIN_LOADER_STRATEGY_ZIP;\n    }\n}\n```\n\n*资源加载策略更灵活，不仅仅只有皮肤包，开发者可配置任意资源获取方式(Zip\u002FApk\u002FJson...)。*\n\n在Application中，添加自定义加载策略:\n\n```java\nSkinCompatManager.withoutActivity(this)\n        .addStrategy(new ZipSDCardLoader());          \u002F\u002F 自定义加载策略，加载zip包中的资源\n```\n\n### 动态设置资源\n\n#### [动态设置颜色](demo\u002Fskin-app\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fximsfei\u002Fskindemo\u002Fpicker\u002FColorPickerActivity.java)\n\n```java\nSkinCompatUserThemeManager.get().addColorState(R.color.colorPrimary, #ffffffff);\n\nSkinCompatUserThemeManager.get().addColorState(R.color.colorPrimary, new ColorState.ColorBuilder().addXxx().build());\n\n\u002F\u002F 清除所有已有颜色值。\nSkinCompatUserThemeManager.get().clearColors();\n```\n\n#### [动态设置图片](demo\u002Fskin-app\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fximsfei\u002Fskindemo\u002Fpicker\u002FDrawablePickerActivity.java)\n\n```java\nSkinCompatUserThemeManager.get().addDrawablePath(R.drawable.windowBackground, \"／sdcard\u002FDCIM\u002FCamera\u002Fxxx.jpg\");\n\n\u002F\u002F 要换肤的资源id，图片路径，图片旋转角度(默认为0)\nSkinCompatUserThemeManager.get().addDrawablePath(R.drawable.windowBackground, \"／sdcard\u002FDCIM\u002FCamera\u002Fxxx.jpg\", 90);\n\n\u002F\u002F 清除所有已有图片路径。\nSkinCompatUserThemeManager.get().clearDrawables();\n```\n\n在设置完颜色及图片后，需要调用`apply()`方法来保存设置。\n\n```java\nSkinCompatUserThemeManager.get().apply();\n```\n\n*资源加载优先级: 用户自定义颜色值-加载策略中的资源-皮肤包资源-应用资源。*\n\n### 获取当前使用皮肤\n\n```\nhttps:\u002F\u002Fgithub.com\u002Fximsfei\u002FAndroid-skin-support\u002Fblob\u002Fmaster\u002Fandroidx\u002Fskin-support\u002Fsrc\u002Fmain\u002Fjava\u002Fskin\u002Fsupport\u002Futils\u002FSkinPreference.java\n```\n\n## 缺点\n\n* 同一个LayoutInflater只能设置一次Factory，容易和同类库产生冲突\n\n## 谁在使用\n\n如果你想提交作品，欢迎提出 [PR](https:\u002F\u002Fgithub.com\u002Fximsfei\u002FAndroid-skin-support\u002Ftree\u002Fmaster\u002Fdocs\u002Fwho-use-it) 或联系[作者](#技术交流)。\n\n\u003Ctable align=\"center\">\n    \u003Ctr align=\"center\">\n        \u003Ctd>\u003Cimg width=\"96\" height=\"96\" src=\"https:\u002F\u002Fgithub.com\u002Fximsfei\u002FAndroid-skin-support\u002Fblob\u002Fmaster\u002Fdocs\u002Fwho-use-it\u002Fsohunews_explore-icon.png\"\u002F>\u003C\u002Ftd>\n        \u003Ctd>\u003Cimg width=\"96\" height=\"96\" src=\"https:\u002F\u002Fgithub.com\u002Fximsfei\u002FAndroid-skin-support\u002Fblob\u002Fmaster\u002Fdocs\u002Fwho-use-it\u002Fvflynote-icon.png\"\u002F>\u003C\u002Ftd>\n        \u003Ctd>\u003Cimg width=\"96\" height=\"96\" src=\"https:\u002F\u002Fgithub.com\u002Fximsfei\u002FAndroid-skin-support\u002Fblob\u002Fmaster\u002Fdocs\u002Fwho-use-it\u002Fqoo-app.png\"\u002F>\u003C\u002Ftd>\n        \u003Ctd>\u003Cimg width=\"96\" height=\"96\" src=\"https:\u002F\u002Fgithub.com\u002Fximsfei\u002FAndroid-skin-support\u002Fblob\u002Fmaster\u002Fdocs\u002Fwho-use-it\u002Fdwnews.png\"\u002F>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr align=\"center\">\n        \u003Ctd>\u003Cb>\u003Ca href=\"https:\u002F\u002Fk.sohu.com\u002F\">搜狐新闻探索版\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n        \u003Ctd>\u003Cb>\u003Ca href=\"http:\u002F\u002Fwww.iyuji.cn\u002Fiyuji\u002Fhome\">讯飞语记\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n        \u003Ctd>\u003Cb>\u003Ca href=\"https:\u002F\u002Fnews.qoo-app.com\u002F\">qoo app\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n        \u003Ctd>\u003Cb>\u003Ca href=\"http:\u002F\u002Fwww.dwnews.com\u002F\">多维新闻\u003C\u002Fa>\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## 技术交流\n\n![](https:\u002F\u002Fgithub.com\u002Fximsfei\u002FRes\u002Fblob\u002Fmaster\u002FAndroid%26%2332%3B%E6%8D%A2%E8%82%A4.png)\n\n## [License MIT](LICENSE)\n","Android-skin-support 是一个用于 Android 应用的动态换肤框架，只需一行代码即可轻松集成。其核心功能包括支持布局和代码中资源的换肤、基础控件及 Material Design 的换肤，并且能够动态设置颜色和图片资源。此外，它还提供了多种加载策略如应用内换肤、插件式换肤以及从自定义路径或 ZIP 文件中加载皮肤资源。该框架适用于需要提供个性化主题体验的应用场景，如夜间模式切换或用户自定义界面风格等。",2,"2026-06-11 02:59:29","top_language"]