Android 主题换肤的开源库 ThemeSkinning

Android 主题换肤的开源库(插件化换肤)

本开源库是基于我之前的一个博客 Android主题换肤 无缝切换 不知道原理的可以去这篇博客看看。

出于易于集成的目的,我将其抽取出来,作为一个模块。提供简洁的api,方便使用。

目前暂时没有发现兼容性问题,欢迎提供使用反馈。

项目地址:ThemeSkinning

更新日志:

  • v1.2.1:完善之前版本View的创建
  • v1.2.0:增加对属性支持的扩展
  • v1.1.0:可以直接加载网络上的皮肤文件

效果图如下:

Demo

1. 使用方法:

  1. 添加依赖 compile 'com.solid.skin:skinlibrary:1.2.1'
  2. 让你的Application继承于SkinBaseApplication
  3. 让你的Activity继承于SkinBaseActivity,如果使用了Fragment则继承于SkinBaseFragment
  4. 在需要换肤的根布局上添加 xmlns:skin="http://schemas.android.com/android/skin" ,然后在需要换肤的View上加上 skin:enable="true"
  5. 新建一个项目模块(只包含有资源文件),其中包含的资源文件的name一定要和原项目中有换肤需求的View所使用的资源name一致。
  6. 打包皮肤文件,放入assets中的skin目录下(skin目录是自己新建的)
  7. 调用换肤
    • 从assets/skin文件夹

  • 从网络

详细的使用,请到示例项目中查看

2.换肤属性的扩展

本开源库默认支持textColor和background的换肤。如果你还需要对其他属性进行换肤,那么就需要去自定义了。

那么如何自定义呢?看下面这个例子:

TabLayout大家应该都用过吧。它下面会有一个指示器,当我们换肤的时候也希望这个指示器的颜色也跟着更改。

  • 新建一个TabLayoutIndicatorAttr 继承于 SkinAttr,然后重写apply方法。apply方法在换肤的时候就会被调用
  • 代码的详细实现

注:attrValueRefId:就是资源id。SkinResourcesUtils是用来获取皮肤包里的资源,这里设置color或者drawable一定要使用本工具类。

  • 当上面的工作完成之后,就到我们自己的Application的onCreate方法中加入 SkinConfig.addSupportAttr("tabLayoutIndicator", new TabLayoutIndicatorAttr());
  • 最后我们就可以正常使用了,dynamicAddSkinEnableView(tablayout, "tabLayoutIndicator", R.color.colorPrimaryDark);

3. 其他一些重要的api

  1. SkinConfig.isDefaultSkin(context):判断当前皮肤是否是默认皮肤
  2. SkinManager.getInstance().restoreDefaultTheme(): 重置默认皮肤
  3. dynamicAddView:当动态创建的View也需要换肤的时候,就可以调用dynamicAddView

4. 使用注意事项:

  1. 换肤默认只支持android的常用控件,对于支持库的控件和自定义控件的换肤需要动态添加(例如: dynamicAddSkinEnableView(toolbar, "background", R.color.colorPrimaryDark);),在布局文件中使用skin:enable="true"是无效的。
  2. 默认不支持状态栏颜色的更改,如果需要换肤的同时也要更改状态栏颜色,请到您的Application文件中加入SkinConfig.setCanChangeStatusColor(true);,状态栏的颜色值来源于colorPrimaryDark
  3. 本开源库使用的Activity是AppCompatActivity,使用的Fragment是android.support.v4.app.Fragment
  4. 有换肤需求View所使用的资源一定要是引用值,例如:@color/red,而不是#ff0000

致谢:

本项目是基于Android-Skin-Loader这个开源库改进而来,再次对原作者表示感谢 Android-Skin-Loader

LICENSE

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

1 3 收藏 评论

关于作者:SOLID

一个Android职场新人,喜欢去探索新技术,活跃于各个技术社区,热衷于Android技术的开发与分享。会不定期的发布技术文章,用通熟易懂的的方式去分享自己学习过程中遇到的坑和开发经验,目前正在Android进阶的道路上。请多多关注我的简书博客:http://www.jianshu.com/user... 个人主页 · 我的文章 · 4 ·     

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部