Android-skin-support 一款用心去做的Andr

作者: Bruce_Wang | 来源:发表于2017-01-17 21:21 被阅读1868次

介绍

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 支持

最佳实践

仿网易云音乐皮肤切换
下载

red_1.png
red_2.png
red_3.png
white_1.png
white_2.png
white_3.png
night_1.png
night_2.png
night_3.png

支持

目前支持:

  • 支持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开发者带来福音, 减少没必要的工作量.


QQ群二维码

致谢

相关文章

  • Android-skin-support 一款用心去做的Andr

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

  • Android-skin-support: 一款用心去做的And

    https://github.com/ximsfei/Android-skin-support Android-s...

  • Android APP换皮肤

    一、前言: Android-skin-support: 一款 Android 换肤框架, 极低的学习成本, 极好的...

  • 使用Android-skin-support生成换肤包

    前言 上一篇我介绍了Android-skin-support的使用方法,那么这一篇就介绍一下如何生成皮肤包Andr...

  • CustomSkinChange通过反射换肤

    前言 上篇文章介绍了Android-skin-support的缺陷(Android-skin-support的缺陷...

  • 用心去做的

    增强感统训练:尤其触觉(玩沙、水,多赤脚,用刷子刷身体)、翻跟头、爬坡、从坡上冲下来 视知觉训练 ...

  • 用心去做

    5月23日 星期三 晴 今天下午出去学习了一下,感受挺深的,我给大家分享一下,希望可以对大家有所帮助。 高手,...

  • 用心去做

    有这样一句话:“世上无难事,只怕有心人。”我个人是很喜欢这句话的。因为这句话无论是在工作还有生活中都会用...

  • 用心去做

    加油,好心情,

  • 用心去做

    从一开始就保持着既然拿工资就对得起给我工资的人,这是做人的一种态度吧,不管在哪里做事情我觉得都是从做人开始的,做一...

网友评论

  • 278096f0b374:你好,博主,看了你的demo代码很是强大,但是有一个很大的问题,导致需要修改源码,但我又不会修改源码,很是困惑。我遇到的问题是:皮肤包是存在宿主app的asset目录下,不能读取服务器下载下来放到sd卡上的皮肤资源,请问这个如何解决呢??大家有没有遇到和我一样的困惑呢?
    Bruce_Wang:可以看一下readme里的自定义加载策略
  • 真的放飞自我:最新版本采用ActivityLifecycleCallback,已经可以不用继承SkinCompatActivity了
    真的放飞自我:@男人1984 虽然代码侵入性变小了,但是更换皮肤时会刷新界面上的所有控件,性能上有所影响
    Bruce_Wang: @男人1984 是的
  • 请手下留情:为什么我的图片更换不了 都是放在同一个包下面 资源名也一样
    Bruce_Wang: @请手下留情 皮肤包包名不能和宿主一样
  • 某兜兜:关于“制作皮肤插件”是不是可以详细一点,我看gitbub里面的skin-night的app项目打包后生成的apk里面应该有android.xml和resource无关的文件,但是你在demo里面的white.skin应该只有对应的资源文件,不知道怎么生成的。
    Bruce_Wang: @某兜兜 皮肤包就是一个普通的apk
  • 5b1adb63fb15:请问引用在style.xml中自定义的style怎么解决?
    Bruce_Wang: @耳朵爱太阳 只要是更新日志里的属性都支持

本文标题:Android-skin-support 一款用心去做的Andr

本文链接:https://www.haomeiwen.com/subject/jzcvbttx.html