最近不少同学在后台催更,还有朋友开始问我是不是出啥事了- -!,是得出来解释下,其实就是最近重心没有放在公众号这块,至于具体缘由就不说啦,感觉各种借口都要被我用完了,你们就当我懒癌复发吧。讲真,真心要给一直支持我的同学们道个歉,尽管很久不更,读者还是在慢慢增长,昨天终于破万了,非常感谢大家一直以来的支持呀,以后还是得坚持发文,尽量勤快些。算起来运营这号刚好半年多时间,当初还觉得这个目标好遥远,其实得益于积累的力量,

做技术何尝不是如此。

今天推荐给各位的是 B 站 xyczero 同学的文章,早前他曾给我投稿过 Android 多主题之坑 一文,其实是来自 B 站的多主题实践总结,近期已将其多主题框架开源,为此专门撰文介绍细节,分享给大家。

可以先看看效果:

以下是 xyczero 同学的原文,文中外链不可点击,点击文末阅读原文可直接访问 MagicaSakura GitHub 项目主页。


  • 如何不重启 APP 切换多主题?
  • 如何只写一份 drawable 或 layout 就可以自动适配各种多主题?
  • 如何兼容低版本的 Android 系统?
  • 如何减少开发人员的学习成本,能够快速适应多主题框架?

开源多主题框架 MagicaSakura 都可以帮你做到。

此处的多主题是指轻量级的多彩主题色,而非插件化形式的多主题皮肤。

不重启APP切换主题

MagicaSakura 提供了全局方法 Theme.refreshUI,直接调用即可无需重启 App 更换应用主题(当然必须得在主线程-,-),同时该方法提供了额外的回调参数,以便满足在主题切换过程中的各种自定义需求。

自适应多主题

Drawable XML

使用预先定义的颜色值,只需编写一份 drawable 即可自动适配多主题样式,无需再为每一种主题都编写一份 drawable 或 style。

支持常规标签

selector,item , shape, layerlist,color 等常规 xml 标签都已支持,能满足应用基本开发需求。

支持直接染色

支持在 xml 中直接染色 (app : drawableTint , app : drawableTintMode),如:

标签配置颜色透明度

在 shape 标签中配置颜色透明度 (android : alpha)

Layout XML

使用 MagicaSakura 中的提供的 TintXXX 控件可以在 layout 中直接对其 drawable 属性进行染色,如:background, src, drawableLeft, button 等,并且包括文字颜色,超链接颜色在内都可以自动跟随多主题变化,非常快捷方便。

代码中适配多主题

MagicaSakura 支持在代码中直接适配多主题。

对于 MagicaSakura 中的 TintXXX 控件

在代码中可以直接对 TintXXX 控件的相关 drawable 进行染色,使用方法与 Android 原生控件基本一致,如:

对于一些特殊需求或自定义控件

MagicaSakura 中提供了 ThemeUtils 工具类,该工具类主要提供了 drawable 染色以及主题色自动转换的相关方法,其中主题色自动转换支持 colorStateList 和 color,可以非常方便的在代码中进行多主题适配。

兼容低版本的 Android 系统

MagicaSakura 目前兼容的最低 SDK 版本为 API 15,即 Android 4.0.3 版本,基本符合绝大多数 APP 开发中的最低 API 要求。

尽量减少学习成本

为减少学习成本,MagicaSakura 基于 Android 原生控件封装了一套 TintXXX 控件,包含所有常用的控件类型,如:TextView,Button,EditText, ProgressDialog 等,能基本满足常规应用开发需求。

TintXXX 控件可自动适配多主题样式,支持在 layout.xml,drawable.xml 和代码中配置。特别的在 layout.xml 中可以方便地与 Android 原生属性配合使用,如 app : drawableLeftTint 可以直接染色 android : drawableLeft,app : backgroundTint 直接染色 android : background 等。

关于夜间模式和多主题皮肤

MagicaSakura 支持夜间模式平滑切换(即无需重启应用),只需在 res 中按需添加相关的 xxx_night 资源文件包。

特别得当 app 的 support 库版本低于 23.2.0 时,可以直接使用 MagicaSakura 内提供的 ThemeUtils.updateNightMode() 方法切换夜间模式,当 support 库版本大于等于 23.2.0 时可以使用 support 库提供的方法。其实Android是原生支持夜间模式的,更多介绍可以详见 Android 多主题之坑 这篇文章。

多主题皮肤和多彩主题是不完全相同的,支持多主题皮肤一般需要引入插件框架,而多彩主题则相对轻量一些。目前 MagicaSakura 暂不支持多主题皮肤,以后会考虑增加对其的支持。

开源

经过几周的筹备和优化,现正式将多主题框架 MagicaSakura 开源,希望能对你有所帮助。

  • 相关源码和详细文档都已在 GitHub 开源,欢迎大家来围观,指出不足之处,一起来完善 MagicaSakura 多主题框架。
  • 传送门地址:https://github.com/Bilibili/MagicaSakura。
  • Demo 下载地址:http://7xr9x5.com1.z0.glb.clouddn.com/magicasrkura_sample-debug.apk

android colorstatelist_B站Android多主题框架开源:MagicaSakura相关推荐

  1. 中科院开源协会镜像站 Android SDK镜像测试发布

    Android SDK 镜像站 Android SDK镜像的介绍使用  http://www.androiddevtools.cn 镜像站地址   由于一些原因,Google相关很多服务都无法访问,所 ...

  2. 各种Android UI开源框架 开源库

    各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...

  3. android+弹幕实现,Android弹幕实现:基于B站弹幕开源系统(1)

     Android弹幕实现:基于B站弹幕开源系统(1) 如今的视频播放,流行在视频上飘弹幕.这里面做的相对比较成熟.稳定.使用量较多的弹幕系统,当推B站的弹幕系统,B站的弹幕系统已经作为开源项目在g ...

  4. Wcdb android 目录,介绍 - 《WCDB - 腾讯开源的移动数据库框架》 - 书栈网 · BookStack...

    WCDB 相关讨论可以加我们的QQ群WCDB 技术交流群: 190485752 WCDB iOS/macOS 群: 708134978 WCDB Android 群: 868268492 WCDB W ...

  5. 【Android】GitHub Android 开源项目汇总

    参考网址:http://blog.csdn.net/ithomer/article/details/8882236 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上. ...

  6. android theme material,Android Studio 换主题(Material Theme..)

    1.去如下网址下载自己喜欢的主题文件xx.jar http://color-themes.com/?view=index 2. 导入方式 下载主题-xxx.jar 注意:如果我们下载下来的jar名字如 ...

  7. osgi框架 android,基于OSGi的Android应用模块动态加载框架设计与实现

    摘要: 伴随着移动互联网科技水平向4G的飞跃,移动终端的使用日趋常态化,移动智能设备的普及率越来越高,得到了大量使用者的追捧.与此同时,各手机操作系统下应用商店里正充斥着琳琅满目的移动应用产品,用户对 ...

  8. android开发笔记之高级主题—传感器的简单介绍

    今天我们开始进入讲解android中的一些高级主题的用法,比如传感器.GPS.NFC.语音和人脸识别等. 这次来对传感器的一个简单介绍: Android平台支持三大类的传感器: 位移传感器 这些传感器 ...

  9. android vitamio封装,Android视频框架Vitamio构建自己的通用播放器

    Vitamio是Android和iOS平台上的全方位多媒体开发框架,完全支持硬件解码和GPU渲染. Vitamio功能强大手机上的万能播放器,可以平滑播放720P或1080P HD MKV,FLV手机 ...

最新文章

  1. html页面怎样禁止复制粘贴,javascript中如何禁止复制粘贴?
  2. 和 对比_家用保温杯小对比
  3. 计算机一级电子表格TF函数,tf.slice()函数详解(极详细)
  4. cassandra 备份_使用sstableloader恢复Cassandra Priam备份
  5. 中点和中值滤波的区别_频谱仪和EMI测试接收机什么区别?安泰维修中心分享
  6. 大型网站的可伸缩性架构如何设计?
  7. android 爆炸动画,一个可以给view显示粒子爆炸/绽放效果的android库 Bloom
  8. fg jobs bg
  9. git 公钥提交代码_gitlab上传公钥和项目代码
  10. Javascript:模拟ztree侧边栏的回收
  11. JAVA数据库增删改查
  12. 一文搞懂X509证书PEM DER CRT CER的区别
  13. 车载之ECU、VCU、MCU、HCU
  14. linux NM 命令使用介绍
  15. CMS 执行的七个阶段
  16. 《桃花庵歌》——唐伯虎
  17. 盘点2015年英特尔旧金山IDF峰会上的黑科技
  18. 第六届山东省赛总结贴
  19. android 10.0 在系统源码下生成jks系统签名文件
  20. 啊哈C——学习2.4一起来找茬

热门文章

  1. win8笔记本关闭小键盘
  2. 反序列化时恢复transient字段
  3. 文件系统的简单的操作
  4. [Leetcode] single number ii 找单个数
  5. 算法(一):二分查找法
  6. 大数据_Flink_Java版_数据处理_流处理API_Transform(5)_connect合流---Flink工作笔记0033
  7. AndroidStudio安卓原生开发_android按钮防止短时间内连续点击_在android_java中都能使用---Android原生开发工作笔记131
  8. webpack的简介---webpack工作笔记001
  9. Netty工作笔记0039---Netty模型--详细版
  10. GIT版本管理异常总结001---copssh安装后登录异常The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.