android 动态换肤方案

通过方法:LayoutInflaterCompat.setFactory,监听xml布局文件加载过程
实现自定义接口LayoutInflaterFactory 
其中方法:
public View onCreateView(View parent, String name, Context context, AttributeSet attrs);
将作为layout xml解析后的回调,这里可以通过反射机制,实例化View, 反射带两个参数的构造方法来实例化。并搜集里面的background和textcolor,并且获取其中的:
backgroundColor="@color/white"

AttributeName="@TypeName/EntryName"
在onCreateView 的attrs中拿到的是id 类似于 "@40003124",转换成int后,可以通过
getResourceTypeName(id) 取得typeName
getResourceEntryName(id) 取得EntryName
通过反射AssertManager,来加载外部资源apk路径,得到Resource对象,然后通过Resource对象的方法:
getIdentifier(String name, String defType, String defPackage)
得到皮肤包中的资源,
然后再一一对View中的相关皮肤属性一一替换,通过set资源的方法。
 
posted @ 2018-05-04 22:22  刘轩舟  阅读(260)  评论(0)    收藏  举报