Android中兑现应用切换主题机制

Android中实现应用切换主题机制文章出处:http://gundumw100.iteye.com/blog/1052260?一直很想弄清楚好多应

Android中实现应用切换主题机制

文章出处:http://gundumw100.iteye.com/blog/1052260

?

一直很想弄清楚好多应用中是如何实现换皮肤这项功能的,花了下午点时间,查了下资料也实现了个切换主题的Demo;?

首先要感谢下这位大哥,参阅了下他写的文件http://www.eoeandroid.com/forum-viewthread-tid-31756-highlight-%E7%9A%AE%E8%82%A4.html?

好了,废话不多说了,该切换主题的demo里面一共实现了两个功能,其一,搜索已经安装的皮肤,其二,应用安装的皮肤。?

主项目包名为org.leepood.skindemo,主题项目的包名为org.leepood.skin.blue,org.leepood.skin.red,等等,只要前缀是org.leepood.skin.就行。?

首先是查找已安装主题的代码:?

?

?

?


Android实现主题切换机制2?
昨天花了点时间实现了主题的切换,但是里面还是不够灵活,回去想了想可以用继承和回调函数来进一步灵活更改主题,现在记录下我的实现办法?
首先一个自定义类ThemeActivity继承自Activity,这个类是以后所有Activity的父类,在这个类里面定义了一个接口?

public interface OnThemeChangedListener?
{?
public void onChanged(String newThemePackageName);?

}?
接下来,首先是要给ThemeActivity注册一个主题切换的listener,代码如下:?

public void setOnThemeChangedListener(OnThemeChangedListener listener)?
{?
this.listener=listener;?
}?
然后就是注册一个SharedPreference来监听xml的变化,当发生改变的时候自动去调用listener.onChanged方法,将新的主题包名传递过去,代码如下:?

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,?
String key) {?
if(key.equals("themePackage"))?
{?
listener.onChanged(sp.getString("themePackage", ""));?
}?

}?
接着在继承于ThemeActivity的子类里面首先是setOnThemeChangedListener.接着用一个匿名内部类搞定。好啦,代码可以见附件啦?