基于插件式的Android換膚框架:ChangeSkin

jopen 9年前發布 | 68K 次閱讀 Android開發 移動開發 ChangeSkin

基于插件式的Android換膚框架,支持app內和或者外部插件式提供資源的換膚方案,無需重啟Activity。

Demo運行

下載night_plugin.apk里面包含資源文件,放到手機或者模擬器SdCard的根目錄。

然后import project,運行app。

運行效果圖:

無需重啟Activity,無縫換膚,資源均來自插件apk中。

使用

只需要按規則定義下資源名稱,然后幾行代碼就完成了換膚。

下載changeskin,作為module依賴至主項目,例如:

dependencies {
     compile project(':changeskin')
}

或者直接添加依賴:

dependencies {
    compile 'com.zhy:changeskin:1.0.0'
}

1、Application中初始化

在你的Application中,去初始化SkinManager,例如:

public class MyApplication extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        SkinManager.getInstance().init(this);
    }
}

別忘了注冊。

2、繼承BaseSkinActivity

讓所有的需要換膚的界面的Activity,繼承自com.zhy.changeskin.base.BaseSkinActivity。

3、對于需要換膚的資源命名使用skin開頭

比如你的某個控件的背景需要換膚:

<android.support.v4.widget.DrawerLayout android:background="@drawable/skin_main_bg" ... 
    />

字體顏色:

 <TextView android:id="@+id/id_tv_title" android:textColor="@color/skin_item_text_color" />

其他的類似。

然后,單獨準備一份插件apk,其實就是普通的項目,僅僅準備需要包含用到的資源即可。

例如:

搞成apk就不用說了吧。

4、換膚API

準備完成資源后,調用:

SkinManager.getInstance().changeSkin(
    mSkinPkgPath, 
    "com.zhy.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();
        }
});

即可完成換膚。第一個參數為插件apk的路徑,第二個參數為插件apk的packageName.

記得設置讀取存儲卡權限。

當然你也可以調用

SkinManager.getInstance().removeAnySkin();

重置為初始狀態。

項目主頁:http://www.baiduhome.net/lib/view/home/1443511421408

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!