项目中实现了换肤的功能,现在采用的ThemeSkinning这个开源框架,github地址是
https://github.com/burgessjp/ThemeSkinning
在集成完之后的测试过程中发现一个问题,我把assets下面的皮肤库同名替换之后,发现新增的内容没有显示出来。程序还是采用的老的皮肤库的资源。
在看过框架的源码之后,发现框架是在Application的oncreate过程中,把assets的skin目录下以".skin"结尾的文件全部拷贝到"/data/"目录下,具体代码如下
private void setUpSkinFile(Context context) {
try {
String[] skinFiles = context.getAssets().list(SkinConfig.SKIN_DIR_NAME);
for (String fileName : skinFiles) {
File file = new File(SkinFileUtils.getSkinDir(context), fileName);
if (!file.exists()) {
SkinFileUtils.copySkinAssetsToDir(context, fileName, SkinFileUtils.getSkinDir(context));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
而切换皮肤只是开启了一个异步的任务,然后从我们之前保存的文件中加载。
所以,我们只要在特定的地方去删除这个文件就行了,下面是删除的方法
public void clearSkinFile() {
try {
String[] skinFiles = this.getAssets().list(SkinConfig.SKIN_DIR_NAME);
for (String fileName : skinFiles) {
File file = new File(SkinFileUtils.getSkinDir(this), fileName);
if (file.exists()) {
file.delete();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
我这里做的比较偷懒,只是把skin下有的皮肤同名皮肤删除了(当然这个方法也可以自行扩展),而方法所放在的地方就要因项目而异了,这里就不在做讲解。