6个月前
0
导航号,我的单页导航
文章目录

前言

之前介绍的是动态换肤库,这次介绍的是一款静态换肤库:BiuSkin1DN。日夜模式换肤是静态换肤的一种,这种是Android自带的一种方式。

BiuSkin1DN主要针对日夜模式而设计的。

demo的使用可以看《静态换肤库BiuSkin1DN的使用

正文

BiuSkin1DN设计跟之前介绍的BiuSkin1PNA 和BiuSkin1PA类似,都是对View的采集,然后在需要的时候进行加载对应资源。

如果对日夜模式不熟悉,可以看《再谈Android日夜模式》,这篇算是我比较全的记录。

什么是BiuSkin1DN

  1. 1表示换肤方式一(有空的话会出方式二)

  2. 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"});

参考文章

部分参考网上文章,时间太久,链接丢了,抱歉!

  1. 再谈Android日夜模式

赏一杯可乐

如果觉得OK,欢迎打赏一杯可乐哈,谢谢

有bug,欢迎留言

导航号,我的单页导航

暂无评论

暂无评论...