Android-Skin-Loader
一個通過動態(tài)加載本地皮膚包進行換膚的皮膚框架
工程目錄介紹
Android-Skin-Loader
├── android-skin-loader-lib // 皮膚加載庫
├── android-skin-loader-sample // 皮膚庫應用實例
├── android-skin-loader-skin // 皮膚包生成demo
└── skin-package // 皮膚包輸出目錄
用法
1. 在Application中進行初始化
public class SkinApplication extends Application {
public void onCreate() {
super.onCreate();
// Must call init first
SkinManager.getInstance().init(this);
SkinManager.getInstance().load();
}
}
2. 在布局文件中標識需要換膚的View
...
xmlns:skin="http://schemas.android.com/android/skin"
...
<TextView
...
skin:enable="true"
... />
3. 繼承BaseActivity或者BaseFragmentActivity作為BaseActivity進行開發(fā)
4. 從.skin文件中設(shè)置皮膚
String SKIN_NAME = "BlackFantacy.skin";
String SKIN_DIR = Environment.getExternalStorageDirectory() + File.separator + SKIN_NAME;
File skin = new File(SKIN_DIR);
SkinManager.getInstance().load(skin.getAbsolutePath(),
new ILoaderListener() {
@Override
public void onStart() {
}
@Override
public void onSuccess() {
}
@Override
public void onFailed() {
}
});
5. 重設(shè)默認皮膚
SkinManager.getInstance().restoreDefaultTheme();
6. 對代碼中創(chuàng)建的View的換膚支持
主要由IDynamicNewView接口實現(xiàn)該功能,在BaseActivity,BaseFragmentActivity和BaseFragment中已經(jīng)實現(xiàn)該接口.
public interface IDynamicNewView {
void dynamicAddView(View view, List<DynamicAttr> pDAttrs);
}
用法:動態(tài)創(chuàng)建View后,調(diào)用dynamicAddView方法注冊該View至皮膚映射表即可(如下).詳見sample工程
private void dynamicAddTitleView() {
TextView textView = new TextView(getActivity());
textView.setText("Small Article (動態(tài)new的View)");
RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
param.addRule(RelativeLayout.CENTER_IN_PARENT);
textView.setLayoutParams(param);
textView.setTextColor(getActivity().getResources().getColor(R.color.color_title_bar_text));
textView.setTextSize(20);
titleBarLayout.addView(textView);
List<DynamicAttr> mDynamicAttr = new ArrayList<DynamicAttr>();
mDynamicAttr.add(new DynamicAttr(AttrFactory.TEXT_COLOR, R.color.color_title_bar_text));
dynamicAddView(textView, mDynamicAttr);
}
7. 皮膚包是什么?如何生成?
- 皮膚包(后綴名為
.skin)的本質(zhì)是一個apk文件,該apk文件不包含代碼,只包含資源文件 - 在皮膚包工程中(示例工程為
skin/BlackFantacy)添加需要換膚的同名的資源文件,直接編譯生成apk文件,再更改后綴名為.skinj即可(防止用戶點擊安裝) - 使用gradle的同學,build
android-skin-loader-skin工程后即可在skin-package目錄下取皮膚包(修改腳本中def skinName = "BlackFantacy.skin"換成自己想要的皮膚名)