android colorstatelist_B站Android多主题框架开源:MagicaSakura
最近不少同学在后台催更,还有朋友开始问我是不是出啥事了- -!,是得出来解释下,其实就是最近重心没有放在公众号这块,至于具体缘由就不说啦,感觉各种借口都要被我用完了,你们就当我懒癌复发吧。讲真,真心要给一直支持我的同学们道个歉,尽管很久不更,读者还是在慢慢增长,昨天终于破万了,非常感谢大家一直以来的支持呀,以后还是得坚持发文,尽量勤快些。算起来运营这号刚好半年多时间,当初还觉得这个目标好遥远,其实得益于积累的力量,
做技术何尝不是如此。
今天推荐给各位的是 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相关推荐
- 中科院开源协会镜像站 Android SDK镜像测试发布
Android SDK 镜像站 Android SDK镜像的介绍使用 http://www.androiddevtools.cn 镜像站地址 由于一些原因,Google相关很多服务都无法访问,所 ...
- 各种Android UI开源框架 开源库
各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...
- android+弹幕实现,Android弹幕实现:基于B站弹幕开源系统(1)
Android弹幕实现:基于B站弹幕开源系统(1) 如今的视频播放,流行在视频上飘弹幕.这里面做的相对比较成熟.稳定.使用量较多的弹幕系统,当推B站的弹幕系统,B站的弹幕系统已经作为开源项目在g ...
- Wcdb android 目录,介绍 - 《WCDB - 腾讯开源的移动数据库框架》 - 书栈网 · BookStack...
WCDB 相关讨论可以加我们的QQ群WCDB 技术交流群: 190485752 WCDB iOS/macOS 群: 708134978 WCDB Android 群: 868268492 WCDB W ...
- 【Android】GitHub Android 开源项目汇总
参考网址:http://blog.csdn.net/ithomer/article/details/8882236 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上. ...
- android theme material,Android Studio 换主题(Material Theme..)
1.去如下网址下载自己喜欢的主题文件xx.jar http://color-themes.com/?view=index 2. 导入方式 下载主题-xxx.jar 注意:如果我们下载下来的jar名字如 ...
- osgi框架 android,基于OSGi的Android应用模块动态加载框架设计与实现
摘要: 伴随着移动互联网科技水平向4G的飞跃,移动终端的使用日趋常态化,移动智能设备的普及率越来越高,得到了大量使用者的追捧.与此同时,各手机操作系统下应用商店里正充斥着琳琅满目的移动应用产品,用户对 ...
- android开发笔记之高级主题—传感器的简单介绍
今天我们开始进入讲解android中的一些高级主题的用法,比如传感器.GPS.NFC.语音和人脸识别等. 这次来对传感器的一个简单介绍: Android平台支持三大类的传感器: 位移传感器 这些传感器 ...
- android vitamio封装,Android视频框架Vitamio构建自己的通用播放器
Vitamio是Android和iOS平台上的全方位多媒体开发框架,完全支持硬件解码和GPU渲染. Vitamio功能强大手机上的万能播放器,可以平滑播放720P或1080P HD MKV,FLV手机 ...
最新文章
- html页面怎样禁止复制粘贴,javascript中如何禁止复制粘贴?
- 和 对比_家用保温杯小对比
- 计算机一级电子表格TF函数,tf.slice()函数详解(极详细)
- cassandra 备份_使用sstableloader恢复Cassandra Priam备份
- 中点和中值滤波的区别_频谱仪和EMI测试接收机什么区别?安泰维修中心分享
- 大型网站的可伸缩性架构如何设计?
- android 爆炸动画,一个可以给view显示粒子爆炸/绽放效果的android库 Bloom
- fg jobs bg
- git 公钥提交代码_gitlab上传公钥和项目代码
- Javascript:模拟ztree侧边栏的回收
- JAVA数据库增删改查
- 一文搞懂X509证书PEM DER CRT CER的区别
- 车载之ECU、VCU、MCU、HCU
- linux NM 命令使用介绍
- CMS 执行的七个阶段
- 《桃花庵歌》——唐伯虎
- 盘点2015年英特尔旧金山IDF峰会上的黑科技
- 第六届山东省赛总结贴
- android 10.0 在系统源码下生成jks系统签名文件
- 啊哈C——学习2.4一起来找茬
热门文章
- win8笔记本关闭小键盘
- 反序列化时恢复transient字段
- 文件系统的简单的操作
- [Leetcode] single number ii 找单个数
- 算法(一):二分查找法
- 大数据_Flink_Java版_数据处理_流处理API_Transform(5)_connect合流---Flink工作笔记0033
- AndroidStudio安卓原生开发_android按钮防止短时间内连续点击_在android_java中都能使用---Android原生开发工作笔记131
- webpack的简介---webpack工作笔记001
- Netty工作笔记0039---Netty模型--详细版
- GIT版本管理异常总结001---copssh安装后登录异常The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.