前言
动态换肤就是常说的外置换肤,App和换肤资源是单独分开的,需要的时候就加载换肤资源即可。
动态换肤的优点:
-
满足用户个性化界面,比如提供多套皮肤
-
相比于静态换肤,减少了apk大小
-
皮肤资源独立,便于维护
正文
总所周知,动态换肤的步骤主要如下:
-
采集View的相关属性
-
加载皮肤包
-
刷新皮肤资源
缺点
-
必须继承继承SkinCompatActivity或SkinActivity
-
Dialog,Toast和悬浮窗无法采集,也无法换肤(若在Activity中,参考《》)
-
由于是采集并保存了View相关属性,存在耗资源
第二个比较致命!
下载
BiuSkin1PA.jar中1PA解释
-
1表示换肤方式一
-
P通过Path路径加载皮肤资源
-
A继承Activity
使用方式
第一步
初始化
SkinManager.initContext(this);
第二步
-
addIgnoreView()添加忽略的View
-
addSupportName()添加自定义View的属性
第三步
设置监听,多个Activity,请在Application中监听。
-
可以拦截不想换肤的属性
-
也可以处理自定义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,欢迎打赏一杯可乐哈,谢谢
暂无评论...
随机推荐
[摘]Android多语言目录对照表
前言 本文摘抄,原文链接在文末。 有参与外销项目,对各国翻译存放的目录很懵,老是忘记哪个对应哪个,今天看到网上相关整理,摘抄于此,方便自己查阅。 好...
王安忆:洗澡
行李前的马路上没有一棵树,太阳就这样直晒下俩。他已经将八大包书捆上了自行车,自行车再也动不了了。那小伙子早已注意他了,很有信心地骑在他的黄鱼车上,...
[摘]Android横屏和竖屏的方法
前言 本文摘抄,方便自己查阅。 正文 AndroidManifest.xml配置 在指定的要设置的Activity对应的标签中加入android:screenOrientation相关属性。 unspeci...
林清玄:什么才是有品质的生活
有好多人喜欢讲生活品质,他们认为花的钱多、花得起钱就是生活品质了。 于是,有愈来愈多的人,在吃饭时一掷万金,在买衣时一掷万金,拼命的挥霍金钱,当我...
[NDK开发]Android JNI开发之动态注册
前言 我们第一篇文章 《[NDK开发]Android JNI 开发之第一个 JNI实例》就是静态注册的。 除了有静态注册,还有动态注册。 静态注册 静态注册:先由Java得到本...
朱光潜:读书不在多,在于选得精,读得彻底
十几年前我曾经写过一篇短文谈读书,这问题实在是谈不尽,而且这些年来我的见解也有些变迁,现在再就这问题谈一回,趁便把上次谈学问有未尽的话略加补充。 ...