动态换肤库:BiuSkin1PA

2023年8月25日 pm2:42发布1年前 (2023)更新 91es.com站长
121 0 0

前言

Android换肤插件已经烂大街了,但找到合适的却比较难。这里记录一下之前写的换肤库,比较简单的动态换肤库:BiuSkin1PA.jar。

动态换肤就是常说的外置换肤,App和换肤资源是单独分开的,需要的时候就加载换肤资源即可。

动态换肤的优点:

  • 满足用户个性化界面,比如提供多套皮肤

  • 相比于静态换肤,减少了apk大小

  • 皮肤资源独立,便于维护

正文

总所周知,动态换肤的步骤主要如下:

  1. 采集View的相关属性

  2. 加载皮肤包

  3. 刷新皮肤资源

缺点

  1. 必须继承继承SkinCompatActivity或SkinActivity

  2. Dialog,Toast和悬浮窗无法采集,也无法换肤(若在Activity中,参考《Android换肤之Toast和Dialog》)

  3. 由于是采集并保存了View相关属性,存在耗资源

第二个比较致命!

下载

BiuSkin1PA.jar中1PA解释

  1. 1表示换肤方式一

  2. P通过Path路径加载皮肤资源

  3. A继承Activity

隐藏内容!
评论可看后才能查看!

使用方式

第一步

初始化

SkinManager.initContext(this);
第二步
  1. addIgnoreView()添加忽略的View

  2. addSupportName()添加自定义View的属性

第三步

设置监听,多个Activity,请在Application中监听。

  1. 可以拦截不想换肤的属性

  2. 也可以处理自定义View中新增的属性进行处理换肤

SkinManager.getInstance().setISkinRefreshListener(this);

下面是对barTextColor和barTextSize属性的拦截并自己调用方式实现换肤。

TextSeekBar是自定义View,barTextColor和barTextSize是新增的属性

@Override
public boolean onSkinRefresh(View view, String attrName, String attrValue,
String attrType, int resourceId) {
    //返回View和相关属性资源
    //这里可以做拦截,返回true表示拦截
    return false;
}
第四步

继承SkinAppCompatActivity或SkinAppActivity,并重写openSwitchSkin()

public class MainActivity extends SkinCompatActivity{
    //重写
    @Override
    protected boolean openSwitchSkin() {
        return true;
    }
}

public class MainActivity extends SkinActivity{
    //重写
    @Override
    protected boolean openSwitchSkin() {
        return true;
    }
}
第五步
# path是换肤资源路径+资源apk
SkinManager.getInstance().changeSkin(path);

参考文章

赏一杯可乐

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

img

有bug,欢迎留言

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

Android悬浮球

前言上次介绍过创建一个《1像素的悬浮窗口》,这里需要做一个跟魅族一样的悬浮球,部分代码套用之前的。设计悬浮球时考虑全屏和非全屏,以及导航栏在左侧或底部情况等,要不然拖动时存在抖动问题。正文直接入正文,上代码片段。隐藏内容!付费阅读后才能查看!¥3 ¥6多个隐藏块只需支付一次付费阅读...

郁达夫:北平的四季

对于一个已经化为异物的故人,追怀起来,总要先想到他或她的好处;随后再慢慢的想想,则觉得当时所感到的一切坏处,也会变作很可寻味的一些纪念,在回忆里开花。关于一个曾经住过的旧地,觉得此生再也不会第二次去长住了,身处入了远离的一角,向这方向的云天遥望一下,回想起来的,自然也同样地只是它的好处。中国的大都...

村田浩一:假想游戏

一个年轻男子在楼梯上超过一个中年男子,奔上了月台,想跳进最近的门,但只差了一步没赶上,门已关上,火车无情地开动了。年轻男子呼吸急促,很遗憾地咂了一下嘴。“哎呀,可惜了。”中年男子这么说着靠过来。他戴副眼镜,稍胖,看起来为人厚道。年轻男子点一下头坐在长椅上。“对,差一步。火车应该稍等一下。”...

[代码片段]时间格式化方式

前言记录一下,格式化时间显示代码片段。正文根据时间的范围,进行时间的格式化100秒 : 01:40400秒 : 01:06:40记录一下,方便自己查阅/** * 时间格式化 * * @param value value * @param bigValue value是否...

陆文夫:脚步声

照理不应该被自己的脚步声吓住,因为在少年时我就在黑暗无人的旷野间听到过此种脚步。那时我住在江边的一个水陆码头上,那里没有学校,只有二里路外的村庄上有一位塾师在那里授馆,我只能去那里读书。那位塾师要求学生们苦读,即使不头悬梁、锥刺股,却也要“闻鸡起舞”,所谓闻鸡起舞就是在鸡鸣时分赶到学塾里去读早书。农...

nginx服务器开启Gzip

前言启用Gzip压缩功能, 可以使网站的css、js 等资源在传输时进行压缩,尽管这样会消耗一定的cpu资源,但是会节约大量的出口带宽来提高访问速度。记录一下,方便自己查阅。正文我这用的是Nginx,因此以这个为例,如果是Apache,可以看参考链接一。找到nginx.conf文件# ...