Android-skin-support 一款用心去做的Android 换肤框架
介绍
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换肤
要点:
- 实现SkinCompatSupportable接口
- 在构造方法中解析出需要换肤的resId
- 在applySkin方法中实现换肤
实现:
自定义View可以直接继承自SkinCompatView, SkinCompatLinearLayout等已有控件
eg: CustomTextView
不想继承自已有控件
eg: CustomTextView2
需要换肤自定义属性
// 需要换肤AutoCompleteTextView的R.attr.popupBackground属性
eg: SkinCompatAutoCompleteTextView需要使用第三方库控件怎么办
// 需要使用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 换肤框架相关推荐
- android方便简单的零侵入可扩展的换肤框架
目前的插件化正如火如荼,插件化开源的也不少,比如360开源的Replugin,滴滴的VirtualApk等等,当然我们今天的主题并不是插件化,而是插件化换肤: android的换肤功能的实现基本有两种 ...
- android的资源混淆和压缩工具,换肤框架
介绍一款可以对android资源进行压缩的工具,超好用(已经在项目中使用到) https://github.com/shwenzhang/AndResGuard Android-skin-suppor ...
- Leakcanary原理解析以及换肤框架skin的原理分析
一.错误现场 java.lang.ClassCastException: androidx.appcompat.widget.TintContextWrapper cannot be cast to ...
- Android换肤功能实现与换肤框架QSkinLoader使用方式介绍
框架地址:https://github.com/qqliu10u/QSkinLoader 效果图 https://github.com/qqliu10u/QSkinLoader/raw/master/ ...
- Android 手写实现插件化换肤框架 兼容Android10 Android11
目录 一.收集所有需要换肤的view及相关属性 二.统一为所有Activity设置工厂(兼容Android9以上) 三.加载皮肤包资源 四.处理支持库或者自定义view的换肤 五.处理状态栏换肤 六. ...
- android换肤动画,Android动态换肤框架-实现换肤
1.换肤流程 1 2.采集流程 2 3.Android资源查找流程 3 4.采集需要换肤的控件 换肤我们需要换所有可能需要换的页面控件,所以我们不可能在每个页面重新findviewById,这时就需要 ...
- android 换肤框架搭建及使用 (3 完结篇)
本系列计划3篇: Android 换肤之资源(Resources)加载(一) setContentView() / LayoutInflater源码分析(二) 换肤框架搭建(三) - 本篇 tips: ...
- android 换肤框架
使用插件化换肤 大家可以先去网易云客户端体验一下个性换肤. 可能大家会疑惑,为什么换个皮肤,还用上了插件化,给大家解释一下. 网易云的个性换肤是可以下载皮肤然后再切换的,那么下载皮肤其实就是在一个皮肤 ...
- android 动态换肤框架,GitHub - ss520k/Android-Skin-Loader: 一个通过动态加载本地皮肤包进行换肤的皮肤框架...
Android-Skin-Loader 更新日志 导入到Android Studio,使用gradle构建皮肤包(见7. 皮肤包是什么?如何生成?)(2015-12-02) 解决Fragment换肤在 ...
最新文章
- wubantu18.04版,pycharm2.18.3.2永久破解来了,借鉴个位大神的教程破掉的,感谢各位大佬...
- oracle 作业 断开原因,解惑 | Oracle JOB 异常中断原因分析
- android 上线apk,码云 Android apk 在线构建功能上线啦!
- Groovy里的日期处理
- 关于 Android 和 iOS 流畅度的一切
- Java与本机代理–他们所做的强大功能
- 数据连接池druid 和 大数据框架druid
- 详细讲解Spring中的@Bean注解
- 如何使非域模式下的组策略对管理员帐号无效
- PSCAD学习笔记(一)
- Timeboxing——业界大佬都在用的时间管理法
- JVM系列-第4章-虚拟机栈
- Paper系列的查重和知网维普的查重对比
- 致大学计算机老师的一封信,优秀书信作文:致大学老师的一封信
- 【ViewPager的学习】一、简单使用
- Android Adapter的使用
- Boki: Stateful Serverless Computing with Shared Logs 笔记
- 【C语言】数组的基本知识详细讲解(一维数组、二维数组、越界、存储.....
- 在Linux中安装ShowDoc
- android 8.0官方刷机包,安卓8.0系统
热门文章
- 小甲鱼《零基础学习Python》课后笔记(二十八):文件——因为懂你,所以永恒
- 笔记本损耗60 计算机提示,无需第三方软件,查看笔记本电脑电池损耗程度的方法...
- 笔记本电池使用及维护
- windows 安装Eclipse win7为例
- K11718 My Cow Ate My Homework[USACO-2017-Dec-S]
- 软件测试100W字!【这可能是最全的总结】
- 李想的理想 IPO :新造车「异类」背后的思考
- 从NMS谈起——实时ANMS
- matlab对于点云栅格化,并且提取路面(粗糙版)
- 夫妻两有厦门户口本,但是父母是外地户口并且没有厦门社保卡,改如何登陆鼓浪屿呢?