android 换肤之style,android换肤总结

1.通过设置不同的style ##

这种方式是通过设置theme 然后activity reCreate重新调用activity 设置主题必须在oncreate()方法 并且在setContentveiw()方法之前 才有效

这篇文章就是利用这种方式切换主题

缺点是:需要重启activity

最终方案按照这个实现的android-skin-load 动态加载skin包

//https://github.com/burgessjp/ThemeSkinning/  在android-skin-load的基础上封装的

2.Android-Skin-Loader

http://mp.weixin.qq.com/s/MSLsoMGHyxiZ0q7fxR3zvg

加载皮肤包

其内部通过反射调用AssetManager.addAssetPath()把外部的皮肤资源加载到AssetManager中,并通过该AssetManager创建相应的Resource。当执行换肤操作的时候,就可以设置需要换肤View的相关属性为Resource中相应的资源

代码中的细节

1.每个skinAttr记录的是某个需要换肤的view的 id background 以及对应的 color / colortitlebar_bg skinAttr -----某个换肤view 的单个属性的一系列字段

2.然后将每个skinAttr 添加到 ListviewAttrs-----添加某个view换肤时所要更改的属性(可以是多个属性)

3.SkinItem (View view; Listattrs; ) 用于封装单个view和其需要换肤的对应的属性集合

4.ListmSkinItems 将所有skinitem进行存储 换肤时遍历刷新

关键的两个判断

boolean isSkinEnable = attrs.getAttributeBooleanValue(SkinConfig.NAMESPACE, SkinConfig .ATTRSKINENABLE, false); 先做 skin:enable="true" view里是否有这个属性的判断

if (!AttrFactory.isSupportedAttr(attrName)) 这个判断是看自己是否支持这个属性 里面一般不全 需要自己添加

更换皮肤

主要根据ListmSkinItems 遍历刷新 每个skinitem 用自己的id从skinmanager获取资源中的color background

skinmanager //里面的资源的获取需要自己实现

public int getColor(int resId)

getDrawable(int resId)

c8e2b8e1239e

c8e2b8e1239e

源码分析 setcontentview(R.layout.xx)的过程

c8e2b8e1239e

c8e2b8e1239e

c8e2b8e1239e

c8e2b8e1239e

c8e2b8e1239e

c8e2b8e1239e

c8e2b8e1239e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值