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群二维码

    致谢

    相关文章

      网友评论

      • 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