外观的实现方法"/>
Android系统更换主题外观的实现方法
作者:Liuhua Chen
一、 实现思路
安卓应用在读取资源时是由AssetManager和Resources两个类来实现的。Resouce类是先根据ID来找到资源文件名称,然后再将该文件名称交给AssetManager来打开文件。我们主题开发的核心思路就是在应用读取资源时,先去主题包里读取资源,若有资源,直接返回主题包的资源,若无资源,直接返回应用本身的资源。
参考博客:
二、 方案实现
a) 修改源码Resource.java
private LoadResourcesCallBack mCallBack;
public interface LoadResourcesCallBack{
ColorStateListloadColorStateList(TypedValue value, int id);
Drawable loadDrawable(TypedValue value, int id);
XmlResourceParser loadXmlResourceParser(int id, String type);
int getDimensionPixelSize(int index);
int getDimensionPixelOffset(int index);
float getDimension(int index);
Integer getInteger(int index);
}
public LoadResourcesCallBack getLoadResourcesCallBack() {
return mCallBack;
}
public boolean regitsterLoadResourcesCallBack(LoadResourcesCallBackcallBack) {
if (callBack== null || mCallBack != null) {
return false;
}
mCallBack = callBack;
return true;
}
在Resouces类是主要加这个接口,这个接口就是主题改变的关键所在。接口LoadResourcesCallBack中的抽象方法,从名子中可以发现,Resources类中也有同名的方法。LoadResourcesCallBack中的方法就是在Resources同名方法中调用,即Resouces类中在执行这些方法时,会先执行LoadResourcesCallBack实现的方法。
LoadResourcesCallBack抽象方法实现如下:
context.getResources().regitsterLoadResourcesCallBack(new Resources.LoadResourcesCallBack() {
@Override
更多推荐
Android系统更换主题外观的实现方法
发布评论