Android-skin-support 一款用心去做的Android 换肤框架

Posted ximsfei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 支持

用法

导入:

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-support 一款用心去做的Android 换肤框架的主要内容,如果未能解决你的问题,请参考以下文章

Android-skin-support: 实现原理

Android-skin-support: 实现原理

博学谷学习记录 自我总结 用心分享 | Netty框架使用

周大福用心服务,带来一场珠宝乐园大冒险

PDMan-2.1.0 正式发布:用心开源,免费的国产数据库建模工具 PowerDesigner

如何利用AngularJS打造一款简单Web应用