目录
前言
之前介绍的是动态换肤库,这次介绍的是一款静态换肤库:BiuSkin1DN。日夜模式换肤是静态换肤的一种,这种是Android自带的一种方式。
BiuSkin1DN主要针对日夜模式而设计的。
demo的使用可以看《静态换肤库BiuSkin1DN的使用》
正文
BiuSkin1DN设计跟之前介绍的BiuSkin1PNA 和BiuSkin1PA类似,都是对View的采集,然后在需要的时候进行加载对应资源。
如果对日夜模式不熟悉,可以看《》,这篇算是我比较全的记录。
什么是BiuSkin1DN
-
1表示换肤方式一(有空的话会出方式二)
-
DN是DayNight的缩写,也就是日夜模式的标志。
下载
接口
主要类或接口
SkinManager.java ISkinRefreshListener.java
ISkinRefreshListener.java
public interface ISkinRefreshListener { boolean onSkinRefresh(View view, String attrName, String attrValue, String attrType, int resourceId); }
返回View和View的属性,让用户自己判断是否需要拦截并实现换肤。
SkinManager.java
核心类,显示主要接口
public void addSupportName(String[] attributeList); public void addIgnoreView(String[] ignoreList); public void changeSkin(final String path); public void setISkinRefreshListener(ISkinRefreshListener listener); public Drawable getDrawable(...); public int getColor(...); public ColorStateList getColorStateList(...); public float getDimension(...) ...
具体请下载BiuSkin1DN.jar查阅。
必选接口
不可缺少,缺一不可
初始化
/** * 初始化 * @param application Application的this * @param appUiMode 1. true 应用内换肤模式,只支持单个Activity * 2. false 系统换肤模式,支持多个Activity */ SkinManager.initContext(this, false);
切换模式
//换肤切换 SkinManager.getInstance().changeSkin();
如果BiuSkinResource2.apk或BiuSkinResource2.apk不存在或者传入的是null,使用的就是默认的皮肤资源。
可选接口
不一定要,可根据需求进行配置。
换肤View监听
# 设置监听,可以拦截View SkinManager.getInstance().setISkinRefreshListener(this); @Override public boolean onSkinRefresh(View view, String attrName, String attrValue, String attrType, int resourceId) { //返回View和相关属性资源 //这里可以做拦截,返回true表示拦截 return false; }
添加忽略View
参考如下规则
SkinManager.getInstance().addIgnoreView(new String[]{"androidx.125la.Toolbar"});
添加自定义属性
支持添加自定义属性换肤
SkinManager.getInstance().addSupportName(new String[]{"barSize"});
参考文章
部分参考网上文章,时间太久,链接丢了,抱歉!
-
《》
赏一杯可乐
如果觉得OK,欢迎打赏一杯可乐哈,谢谢
有bug,欢迎留言
暂无评论...
随机推荐
Kotlin之子类和子类型
前言简单记录下一下Kotlin中子类和子类型的相关知识,方便自己查阅。小结子类是继承的概念,如果B继承A,则B就是A的子类。如果需要使用类型A的变量时,可以使用类型B的变量来代替,则此时类型B就是A的子类型。在需要使用时,用子类去替代父类,此时子类就是父类的子类型。正文...
Math.random()随机数
前言Math.random()是Java中提供用于参数随机数的,但老是忘记怎么用了或限定范围,因此记录一下,方便自己查阅。本文主要是摘抄正文 /** * Returns a {@code double} value with a positive sign, great...
何其芳:预言
这一个心跳的日子终于来临!呵,你夜的叹息似的渐近的足音我听得清本是林叶和夜风私语,麋鹿驰过苔径的细碎的蹄声!告诉我,用你银铃的歌声告诉我,你是不是预言中的年轻的神?你一定来自那温郁的南方!告诉我那里的月色,那里的日光!告诉我春风是怎样吹开百花,燕子是怎样痴恋着绿杨?我将合眼睡在你...
龙应台:我为什么要求你读书
那天我问你,“你将来想做什么”,我注意到,你很不屑于回答我这个问题,所以跟我胡诌一通。是因为你们这个时代的人,对未来太自信,所以不屑与像我这一代人年轻时一样,讲究勤勤恳恳、如履薄冰,还是其实你们对于未来太没信心,所以假装出一种嘲讽和狂妄的姿态,来闪避我的追问?我几乎要相信,你是在假装潇洒了。今天的...
MediaPlayer异常
前言播放媒体测试时,出现Mediaplayer报异常问题,如下打印日志MediaPlayerNative(13594): start called in state 4, mPlayer(0x75b4e81280)MediaPlayerNative(13594): error (-38, 0...
AssetManager读取assets文件
前言Android开发中,需要读取assets文件夹下的资源文件。assets文件夹是用于存放应用程序资源文件的目录,可以存放任意文件类型,比如图片、音频、字体等。AssetManager是Android应用程序资源管理器,访问assets文件夹内容就需要它。本文简单记录一下通过AssetM...