一键换肤--动态更换主题颜色风格
基于前一段时间项目具有换肤需求的功能,几经预研学习换肤功能效果,网上的资源很多,最初看到是网易换肤的酷炫效果,今天得空打算写一篇关于换肤功能的文章,项目无需重启Activity的就可以实现无缝换肤切换功能,可高仿网易云音乐的主题换肤效果。
本文介绍的换肤效果是通过依赖library来设置tag来实现更换主题效果的,可通过项目,library所使用的机制是通过根据每个view中所设置的tag标签在执行recreate()方法的时候来匹配不同的tag展示所需要的效果,在DefaultProcessor类中定义了许多不同状态下的tag标签,如图:
项目中可以对控件文字动态更改颜色,可在继承View和ViewGroup对应的子类的布局文件中例如TextView通过设置android:tag="text_primary_color"和RelativeLayout中设置android:tag="bg_primary_color"来添加相关tag的关联,如图:
在本文DynamicSkin中,提供了多种不同主题背景颜色的选择,而且还实现了仿照网易音乐的滑动颜色条,通过自定义不同颜色带分布的滑动条ColorPickerView,用来实现多种颜色不满足需求的情况下的自取颜色的主题风格,该ColorPickerView中的颜色带是通过LinearGradient类来绘制在不同区间以镜像方式平铺展示不同颜色的一个渐变效果,如图:
项目中也可以动态对图片进行更改颜色,对于图片颜色的动态改变,需要注意的是需要图片所要改变的地方做成镂空图(可查看项目中图片效果DynamicSkin),这样通过设置动态背景来实现图片换肤功能,在选取合适的颜色时将颜色存储到SharedPreferences中(如下图),然后可以设置tag为bg_primary_color,也可以通过在代码中设置imageView.setBackground(newColorDrawable(Config.getPrimaryColor() ==0? getResources().getColor(R.color.global_color) : Config.getPrimaryColor()));
需要注意的是继承Application的Myapp中getATEKey()方法往SharedPreferences中存储哪种模式下的换肤状态(此处可优化,不加会报错)模式,还需注意的是关于多套图片和完全不同的布局文件资源的换肤,可以通过插件的形式加载需要换肤的apk资源包,网上关于这类教程也有很多,之前也预研了解过,但是没在项目中实现,需要学习,可以在网上搜索查看。
在此项目中可了解到:
1.自定义的通用标题栏,可用于整个项目,便于管理。
2.项目结构分层,实现类基于base模块,简化的base模块用于整个项目生命周期等管理,便于简化代码结构。
3.整体项目动态更换主题,动态变色,原理中关键是通过设置一个tag来进行标记,高仿网易云音乐的主题换肤
4.自定义颜色条控件具体实现
具体功能点请查看项目DynamicSkin,接下来展示具体实现效果图
github源码地址:DynamicSkin 欢迎大家Star和Fork,有问题多多讨论!
参考:项目中library采用的是github上的这个开源项目app-theme-engine-master中依赖的一个library,在此感谢!
一键换肤--动态更换主题颜色风格相关推荐
- vue 一键换肤(切换主题样式)
目录 方法一:动态修改全局CSS变量 方法二:切换主题CSS文件 方法三:切换顶级CSS类名 方法一:动态修改全局CSS变量 1. 在全局css文件或 app.vue中定义全局CSS变量 <st ...
- Vue + Element UI+Scss + Vuex一键换肤 , 一键换字体大小 ,动态替换全局主题颜色
一.前言 其实我这个写法每个UI库都通用 , 不局限于ElementUI , 看明白思路就知道怎么写了 一键换肤 , 动态替换全局主题颜色功能已经实现很久了 , 在项目验收的时候出现了一个小问题 , ...
- vue3一键换肤+存储
一键换肤 动态修改全局CSS变量 document.documentElement.style.setProperty("css变量(- -xxx的那个)",值); 动态切换多个C ...
- vue 一键换肤 换主题
该一键换肤只是定义好几个颜色,并进行简单的切换. 在src下的assets文件下面定义一个css文件夹,在对应的文件里面定义_handle.scss和_themes.scss文件,如下: image. ...
- Android 主题Theme样式一键换肤,非常简单(附小案例)
导语 谷歌v7后的主题Theme其实就有意给开发者们开辟换肤的功能,我们一起手动制作一款可以换肤主题,开始撸码吧! 一.统一自定义属性名 attr.xml <?xml version=" ...
- 动态一键换肤实现思路和demo
前言 浏览器切换样式无非是通过css,总共有以下三种方法. 内联style 注入style 注入link 那么我们想要实现一键换肤,那么我们为了剥离干净dom和css.我们只能选择style和link ...
- [CSS] 自定义变量带你随心所欲,一键换肤
认识CSS自定义变量 CSS自定义属性?听着怎么那么神奇呢,属性还可以自定义,那不是可以放肆地玩耍?我自己定义的属性浏览器都能认识? 一.基础 (一)名字和用途 其实CSS自定义属性还有很多小名,比如 ...
- 如何利用 SCSS 实现一键换肤
本文首发于政采云前端团队博客:如何利用 SCSS 实现一键换肤 https://www.zoo.team/article/theme-scss 前言 在项目开发过程中,我们有时候遇到需要更换站点主题色 ...
- Android通过Hook技术实现一键换肤
目录 1.什么是一键换肤 2.界面上那些东西可以换肤 3.利用Hook实现一键换肤 4.Android创建视图源码分析 4.1.自定义Activity设置要显示的布局文件xml 4.2.调用兼容App ...
最新文章
- 【c语言】求最大最小值
- struts.xml 文件添加DTD文件
- 柳青:2017,滴滴实现规模增长和修炼内功的一年
- mysql 聚簇索引 和聚簇索引 (二级索引)的 那些事
- 领域驱动设计,让程序员心中有码
- 七、MySql-锁与事物
- 计算机在旅游管理方面的应用,谈旅游管理信息系统的设计与应用
- lockdir.exe(文件夹加密软件)重装系统后打不开的解决办法
- 使用Kettle读取Excel文件中的数据,存储在MySQL中
- 软硬件全开源,航芯方案分享 | 热敏打印机方案
- mysql用户定义的完整性_Mysql(数据库完整性)
- 微信公众号答题功能搭建
- 中国支付清算协会发布《2022中国支付清算行业社会责任报告》
- 尝试做自己不喜欢的事,并努力将其做好
- SPI接口的MISO和MOSI连接时注意
- RK3399 ARM开发板添加中文输入法
- 怎么把图片的分辨率调高?如何调整图片分辨率?
- 基于Matlab的火灾预警系统
- 纠结的上传控件,啊!多么痛的领悟
- css3抽奖转盘html5,HTML5抽奖转盘-CSS3超简单版本