介绍

Github地址: https://github.com/ximsfei/Android-skin-support

Android-skin-support: 一款用心去做的Android 换肤框架, 极低的学习成本, 极好的用户体验.

重要的事情说三遍:
只需要两行代码, 就可以实现换肤, 你值得拥有!!!
只需要两行代码, 就可以实现换肤, 你值得拥有!!!
只需要两行代码, 就可以实现换肤, 你值得拥有!!!

第一行: 在Application的onCreate中初始化

SkinCompatManager.init(this).loadSkin();

第二行: 继承自SkinCompatActivity

public class BaseActivity extends SkinCompatActivity {}

就这么简单, 你的APK已经拥有了强大的换肤功能.

skin-app // 换肤demo app
skin-night // 换肤demo 夜间模式
skin-support // 换肤框架, 基础控件支持
skin-support-design // 换肤框架, Material Design 支持

最佳实践

仿网易云音乐皮肤切换

下载



支持

目前支持:

  • 支持Android 4.x, 5.x, 6.x, 7.x
  • 支持自定义View换肤
  • skin-support: appcompat-v7 支持

    • View
    • Button
    • CheckBox
    • EditText
    • TextView
    • ImageView
    • ImageButton
    • RadioButton
    • FrameLayout
    • LinearLayout
    • RelativeLayout
    • CheckedTextView
    • AutoCompleteTextView
    • MultiAutoCompleteTextView

    • android.support.v7.widget.Toolbar

  • skin-support-design: material design 支持

    • TabLayout
    • AppBarLayout
    • NavigationView
    • 更多控件支持, 期待你们加入

用法

导入:

git clone https://github.com/ximsfei/Android-skin-support.git

选择需要的module依赖:

// aar
dependencies {compile(name: 'skin-support-release', ext: 'aar') // Android 基础控件, 及V7包中的一些控件compile(name: 'skin-support-design-release', ext: 'aar') // Android support design包中的一些控件
}

或者

dependencies {compile project(':skin-support')compile project(':skin-support-design')
}

或者

// 可以打开调试日志
dependencies {releaseCompile project(path: ':skin-support', configuration: 'release')debugCompile project(path: ':skin-support', configuration: 'debug')releaseCompile project(path: ':skin-support-design', configuration: 'release')debugCompile project(path: ':skin-support-design', configuration: 'debug')
}

初始化:

在Application的onCreate中初始化

@Override
public void onCreate() {super.onCreate();SkinCompatManager.init(this).loadSkin(); // 应用启动加载当前(保存在SharedPreferences中)皮肤库
}

继承SkinCompatActivity

让所有需要换肤的Activity继承自skin.support.app.SkinCompatActivity.

public class BaseActivity extends SkinCompatActivity {}

加载插件皮肤库

// 指定皮肤插件, 并且监听加载状态
SkinCompatManager.getInstance().loadSkin("new.skin");// 恢复应用默认皮肤
SkinCompatManager.getInstance().restoreDefaultTheme();

自定义View换肤

要点:

  1. 实现SkinCompatSupportable接口
  2. 在构造方法中解析出需要换肤的resId
  3. 在applySkin方法中实现换肤

实现:

  1. 自定义View可以直接继承自SkinCompatView, SkinCompatLinearLayout等已有控件

    eg: CustomTextView

  2. 不想继承自已有控件

    eg: CustomTextView2

  3. 需要换肤自定义属性

    // 需要换肤AutoCompleteTextView的R.attr.popupBackground属性
    eg: SkinCompatAutoCompleteTextView

  4. 需要使用第三方库控件怎么办

    // 需要使用https://github.com/hdodenhof/CircleImageView 控件, 并且要支持换肤
    eg: CustomCircleImageView

制作皮肤插件:

新建Android application工程

将需要换肤的资源放到res目录下(同名资源)

打包生成apk, 即为皮肤包

交流合作

深入研究发现Android换肤原理其实不难, 难在要实现一个完善的换肤框架所带来的工作量, 所以在没有特殊原因的前提下, 希望大家多多使用, 多多交流, 为本项目贡献自己的力量, 为所有Android开发者带来福音, 减少没必要的工作量.

致谢

  • Android-Skin-Loader
  • android com.android.support:appcompat-v7源码

Android-skin-support 一款用心去做的Android 换肤框架相关推荐

  1. android方便简单的零侵入可扩展的换肤框架

    目前的插件化正如火如荼,插件化开源的也不少,比如360开源的Replugin,滴滴的VirtualApk等等,当然我们今天的主题并不是插件化,而是插件化换肤: android的换肤功能的实现基本有两种 ...

  2. android的资源混淆和压缩工具,换肤框架

    介绍一款可以对android资源进行压缩的工具,超好用(已经在项目中使用到) https://github.com/shwenzhang/AndResGuard Android-skin-suppor ...

  3. Leakcanary原理解析以及换肤框架skin的原理分析

    一.错误现场 java.lang.ClassCastException: androidx.appcompat.widget.TintContextWrapper cannot be cast to ...

  4. Android换肤功能实现与换肤框架QSkinLoader使用方式介绍

    框架地址:https://github.com/qqliu10u/QSkinLoader 效果图 https://github.com/qqliu10u/QSkinLoader/raw/master/ ...

  5. Android 手写实现插件化换肤框架 兼容Android10 Android11

    目录 一.收集所有需要换肤的view及相关属性 二.统一为所有Activity设置工厂(兼容Android9以上) 三.加载皮肤包资源 四.处理支持库或者自定义view的换肤 五.处理状态栏换肤 六. ...

  6. android换肤动画,Android动态换肤框架-实现换肤

    1.换肤流程 1 2.采集流程 2 3.Android资源查找流程 3 4.采集需要换肤的控件 换肤我们需要换所有可能需要换的页面控件,所以我们不可能在每个页面重新findviewById,这时就需要 ...

  7. android 换肤框架搭建及使用 (3 完结篇)

    本系列计划3篇: Android 换肤之资源(Resources)加载(一) setContentView() / LayoutInflater源码分析(二) 换肤框架搭建(三) - 本篇 tips: ...

  8. android 换肤框架

    使用插件化换肤 大家可以先去网易云客户端体验一下个性换肤. 可能大家会疑惑,为什么换个皮肤,还用上了插件化,给大家解释一下. 网易云的个性换肤是可以下载皮肤然后再切换的,那么下载皮肤其实就是在一个皮肤 ...

  9. android 动态换肤框架,GitHub - ss520k/Android-Skin-Loader: 一个通过动态加载本地皮肤包进行换肤的皮肤框架...

    Android-Skin-Loader 更新日志 导入到Android Studio,使用gradle构建皮肤包(见7. 皮肤包是什么?如何生成?)(2015-12-02) 解决Fragment换肤在 ...

最新文章

  1. wubantu18.04版,pycharm2.18.3.2永久破解来了,借鉴个位大神的教程破掉的,感谢各位大佬...
  2. oracle 作业 断开原因,解惑 | Oracle JOB 异常中断原因分析
  3. android 上线apk,码云 Android apk 在线构建功能上线啦!
  4. Groovy里的日期处理
  5. 关于 Android 和 iOS 流畅度的一切
  6. Java与本机代理–他们所做的强大功能
  7. 数据连接池druid 和 大数据框架druid
  8. 详细讲解Spring中的@Bean注解
  9. 如何使非域模式下的组策略对管理员帐号无效
  10. PSCAD学习笔记(一)
  11. Timeboxing——业界大佬都在用的时间管理法
  12. JVM系列-第4章-虚拟机栈
  13. Paper系列的查重和知网维普的查重对比
  14. 致大学计算机老师的一封信,优秀书信作文:致大学老师的一封信
  15. 【ViewPager的学习】一、简单使用
  16. Android Adapter的使用
  17. Boki: Stateful Serverless Computing with Shared Logs 笔记
  18. 【C语言】数组的基本知识详细讲解(一维数组、二维数组、越界、存储.....
  19. 在Linux中安装ShowDoc
  20. android 8.0官方刷机包,安卓8.0系统

热门文章

  1. 小甲鱼《零基础学习Python》课后笔记(二十八):文件——因为懂你,所以永恒
  2. 笔记本损耗60 计算机提示,无需第三方软件,查看笔记本电脑电池损耗程度的方法...
  3. 笔记本电池使用及维护
  4. windows 安装Eclipse win7为例
  5. K11718 My Cow Ate My Homework[USACO-2017-Dec-S]
  6. 软件测试100W字!【这可能是最全的总结】
  7. 李想的理想 IPO :新造车「异类」背后的思考
  8. 从NMS谈起——实时ANMS
  9. matlab对于点云栅格化,并且提取路面(粗糙版)
  10. 夫妻两有厦门户口本,但是父母是外地户口并且没有厦门社保卡,改如何登陆鼓浪屿呢?