基于前一段时间项目具有换肤需求的功能,几经预研学习换肤功能效果,网上的资源很多,最初看到是网易换肤的酷炫效果,今天得空打算写一篇关于换肤功能的文章,项目无需重启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,在此感谢!

一键换肤--动态更换主题颜色风格相关推荐

  1. vue 一键换肤(切换主题样式)

    目录 方法一:动态修改全局CSS变量 方法二:切换主题CSS文件 方法三:切换顶级CSS类名 方法一:动态修改全局CSS变量 1. 在全局css文件或 app.vue中定义全局CSS变量 <st ...

  2. Vue + Element UI+Scss + Vuex一键换肤 , 一键换字体大小 ,动态替换全局主题颜色

    一.前言 其实我这个写法每个UI库都通用 , 不局限于ElementUI , 看明白思路就知道怎么写了 一键换肤 , 动态替换全局主题颜色功能已经实现很久了 , 在项目验收的时候出现了一个小问题 , ...

  3. vue3一键换肤+存储

    一键换肤 动态修改全局CSS变量 document.documentElement.style.setProperty("css变量(- -xxx的那个)",值); 动态切换多个C ...

  4. vue 一键换肤 换主题

    该一键换肤只是定义好几个颜色,并进行简单的切换. 在src下的assets文件下面定义一个css文件夹,在对应的文件里面定义_handle.scss和_themes.scss文件,如下: image. ...

  5. Android 主题Theme样式一键换肤,非常简单(附小案例)

    导语 谷歌v7后的主题Theme其实就有意给开发者们开辟换肤的功能,我们一起手动制作一款可以换肤主题,开始撸码吧! 一.统一自定义属性名 attr.xml <?xml version=" ...

  6. 动态一键换肤实现思路和demo

    前言 浏览器切换样式无非是通过css,总共有以下三种方法. 内联style 注入style 注入link 那么我们想要实现一键换肤,那么我们为了剥离干净dom和css.我们只能选择style和link ...

  7. [CSS] 自定义变量带你随心所欲,一键换肤

    认识CSS自定义变量 CSS自定义属性?听着怎么那么神奇呢,属性还可以自定义,那不是可以放肆地玩耍?我自己定义的属性浏览器都能认识? 一.基础 (一)名字和用途 其实CSS自定义属性还有很多小名,比如 ...

  8. 如何利用 SCSS 实现一键换肤

    本文首发于政采云前端团队博客:如何利用 SCSS 实现一键换肤 https://www.zoo.team/article/theme-scss 前言 在项目开发过程中,我们有时候遇到需要更换站点主题色 ...

  9. Android通过Hook技术实现一键换肤

    目录 1.什么是一键换肤 2.界面上那些东西可以换肤 3.利用Hook实现一键换肤 4.Android创建视图源码分析 4.1.自定义Activity设置要显示的布局文件xml 4.2.调用兼容App ...

最新文章

  1. 【c语言】求最大最小值
  2. struts.xml 文件添加DTD文件
  3. 柳青:2017,滴滴实现规模增长和修炼内功的一年
  4. mysql 聚簇索引 和聚簇索引 (二级索引)的 那些事
  5. 领域驱动设计,让程序员心中有码
  6. 七、MySql-锁与事物
  7. 计算机在旅游管理方面的应用,谈旅游管理信息系统的设计与应用
  8. lockdir.exe(文件夹加密软件)重装系统后打不开的解决办法
  9. 使用Kettle读取Excel文件中的数据,存储在MySQL中
  10. 软硬件全开源,航芯方案分享 | 热敏打印机方案
  11. mysql用户定义的完整性_Mysql(数据库完整性)
  12. 微信公众号答题功能搭建
  13. 中国支付清算协会发布《2022中国支付清算行业社会责任报告》
  14. 尝试做自己不喜欢的事,并努力将其做好
  15. SPI接口的MISO和MOSI连接时注意
  16. RK3399 ARM开发板添加中文输入法
  17. 怎么把图片的分辨率调高?如何调整图片分辨率?
  18. 基于Matlab的火灾预警系统
  19. 纠结的上传控件,啊!多么痛的领悟
  20. css3抽奖转盘html5,HTML5抽奖转盘-CSS3超简单版本

热门文章

  1. python抓取html写进excel,python爬虫写入excel
  2. python3 解码url
  3. Kronos银行木马的前世今生
  4. JavaScript初探 三 (学习js数组)
  5. bf2无限载具服务器,BF2服务器命令行大全
  6. 支付宝支付之APP支付接口 服务器端
  7. MC0102 房间打扫
  8. pygame网络游戏_1:简介
  9. 雅思培训心得(2)口语考试应对策略(8-8更新)
  10. dnf一换线就服务器不稳定,DNF:史派克做事了!换线黑屏已解决,玩家点取消可返回其它频道...