Android快速换肤之App内部换肤
目录
原理
添加多套values和drawable文件,通过 Android-skin-support框架动态的替换来实现切换主题的效果。
实现步骤
- 添加依赖
implementation 'skin.support:skin-support:3.1.0-beta1' // skin-support 基础控件支持 implementation 'skin.support:skin-support-design:3.1.0-beta1' // skin-support-design material design 控件支持[可选] implementation 'skin.support:skin-support-cardview:3.1.0-beta1' // skin-support-cardview CardView 控件支持[可选] implementation 'skin.support:skin-support-constraint-layout:3.1.0-beta1' // skin-support-constraint-layout ConstraintLayout 控件支持[可选]
- 创建MyApplication类在onCreate方法中进行初始化
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); SkinCompatManager.withoutActivity(this) // 基础控件换肤初始化 .addInflater(new SkinMaterialViewInflater()) // material design 控件换肤初始化[可选] .addInflater(new SkinCardViewInflater()) // CardView v7 控件换肤初始化[可选] .setSkinStatusBarColorEnable(true) //切换状态栏颜色 // .setSkinStatusBarColorEnable(false) // 关闭状态栏换肤,默认打开[可选] // .setSkinWindowBackgroundEnable(false) // 关闭windowBackground换肤,默认打开[可选] .loadSkin(); } }
- 添加皮肤(例如皮肤名为night则需要创建res-night文件夹来存放对应的资源文件,然后需要在app的gradle文件中添加如下代码)
sourceSets {main {res.srcDirs = ['src/main/res', 'src/main/res-night']}}
同时需要将对应的资源文件加上_night后缀
-
然后将控件的属性设置为引用资源的方式
- 然后在代码中只需要执行一行代码即可实现换肤
SkinCompatManager.getInstance().restoreDefaultTheme();//恢复默认皮肤 SkinCompatManager.getInstance().loadSkin("night", null, SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);//切换皮肤名为night的皮肤
实例演示
这是我在学习换皮肤时做的一个案例,在这将它分享出来https://github.com/myml666/AndroidSkinDemo。
个人技术博客:https://myml666.github.io
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
单例模式的正确写法
单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好、用对单例模式,还真得费一番脑筋。本文对Java中常见的单例模式写法做了一个总结,如有错漏之处,恳请读者指正。 饿汉法 顾名思义,饿汉法就是在第一次引用该类的时候就创建对象实例,而不管实际是否需要创建。代码如下: public class Singleton { private static Singleton = new Singleton(); private Singleton() {} public static getSignleton(){ return singleton; } } 这样做的好处是编写简单,但是无法做到延迟创建对象。但是我们很多时候都希望对象可以尽可能地延迟加载,从而减小负载,所以就需要下面的懒汉法: 单线程写法 这种写法是最简单的,由私有构造器和一个公有静态工厂方法构成,在工厂方法中对singleton进行null判断,如果是null就new一个出来,最后返回singleton对象。这种方法可以实现延时加载,但是有一个致命弱点:线程不安全。如果有两条线程同时调用getSingleton()方...
- 下一篇
AVD Nexus_5X_API_24 is already running. If that is not the case, delet...
今天开启模拟机,弹出来这么个毛病: AVD Nexus_5X_API_24 is already running. If that is not the case, delete the files at C:\...\.android\avd/Nexus_5X_API_24.avd/*.lock and try again. 查了网上博文,说是因为虚拟机刚搭建好的时候默认会建立"*.lock"文件夹,而且当你把虚拟机关掉时这个文件夹会自动删除,可能是上次关PC时太草率,所以这个逗比文件夹没给删除掉, 好了,那跟着提示去找那个文件夹(报错都没给全名字对吧,可好找了),将之删除,再启动模拟机,就OK了:
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群