開源框架地址:https://github.com/hongyangAndroid/AndroidChangeSkin
AndroidChangeSkin
特點
- 插件式換膚
- 應用內換膚
- 支持插件或者應用內多套皮膚
- 支持動態生成addView
- 無需重啓Activity
效果圖:
引入
下載changeskin,作爲module依賴至主項目,例如:
dependencies {
compile project(':changeskin')
}
或者直接添加依賴:
dependencies {
compile 'com.zhy:changeskin:4.0.2'
}
運行
Android Studio,import Project形式導入,將skin_plugin.apk,放置到模擬器或者真機的sdcard根目錄,然後運行項目。
使用
- Application
Application中去調用SkinManager.getInstance().init(this);
,未來版本可能會去除該步驟。
public class MyApplication extends Application
{
@Override
public void onCreate()
{
super.onCreate();
SkinManager.getInstance().init(this);
}
}
- Activity
在需要換膚的Activity的onCreate和onDestory中,分別:
@Override
protected void onCreate(Bundle savedInstanceState)
{
SkinManager.getInstance().register(this);
//...
}
@Override
protected void onDestroy()
{
super.onDestroy();
SkinManager.getInstance().unregister(this);
}
- 佈局文件
佈局文件中添加支持,主要依賴於tag屬性:
例如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="skin:item_text_color:textColor"
android:text="@string/hello_world"
android:textColor="@color/item_text_color"/>
tag屬性分爲3部分組成:
- skin
- 資源的名稱,即插件包中資源的名稱,需要與當前app內使用的資源名稱一致。
- 支持的屬性,目前支持src,background,textColor,支持擴展。
3部分,必須以:分隔拼接。
對於一個View多個屬性需要換膚的,android:tag="skin:item_text_color:textColor|skin:icon:src"
同樣使用|進行分隔。
簡言之:如果你哪個View需要換膚,就添加tag屬性,tag值按照上述方式設置即可。
- 換膚的API
插件式:
SkinManager.getInstance().changeSkin(
mSkinPkgPath,
"com.imooc.skin_plugin",
new ISkinChangingCallback()
{
@Override
public void onStart()
{
}
@Override
public void onError(Exception e)
{
Toast.makeText(MainActivity.this, "換膚失敗", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete()
{
Toast.makeText(MainActivity.this, "換膚成功", Toast.LENGTH_SHORT).show();
}
});
應用內:
SkinManager.getInstance().changeSkin(suffix);
應用內多套皮膚以後綴就行區別,比如:main_bg,皮膚資源可以爲:main_bg_red,main_bg_green等。
換膚時,直接傳入後綴,例如上面描述的red,green。