一種完全無侵入的換膚方式,支持插件式和應用內,無需重啓Activity.

開源框架地址: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。


發佈了175 篇原創文章 · 獲贊 121 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章