package ren.solid.skinloader.base;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.view.LayoutInflaterCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import java.util.List;
import ren.solid.skinloader.attr.DynamicAttr;
import ren.solid.skinloader.load.SkinInflaterFactory;
import ren.solid.skinloader.load.SkinManager;
import ren.solid.skinloader.statusbar.StatusBarBackground;
import ren.solid.skinloader.listener.IDynamicNewView;
import ren.solid.skinloader.listener.ISkinUpdate;
/**
* Created by _SOLID
* Date:2016/4/14
* Time:10:24
* <p>
* 需要实现换肤功能的Activity就需要继承于这个Activity
*/
public class SkinBaseActivity extends AppCompatActivity implements ISkinUpdate, IDynamicNewView {
// 当前Activity是否需要响应皮肤更改需求
private boolean isResponseOnSkinChanging = true;
private SkinInflaterFactory mSkinInflaterFactory;
@Override
protected void onCreate(Bundle savedInstanceState) {
mSkinInflaterFactory = new SkinInflaterFactory();
//getLayoutInflater().cloneInContext(this).setFactory(mSkinInflaterFactory);
LayoutInflaterCompat.setFactory(getLayoutInflater(), mSkinInflaterFactory);
super.onCreate(savedInstanceState);
changeStatusColor();
}
@Override
protected void onResume() {
super.onResume();
SkinManager.getInstance().attach(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
SkinManager.getInstance().detach(this);
mSkinInflaterFactory.clean();
}
@Override
public void onThemeUpdate() {
Log.i("SkinBaseActivity", "onThemeUpdate");
if (!isResponseOnSkinChanging) {
return;
}
mSkinInflaterFactory.applySkin();
changeStatusColor();
// //设置window的背景色
// Drawable drawable = new ColorDrawable(SkinManager.getInstance().getColorPrimaryDark());
// getWindow().setBackgroundDrawable(drawable);
}
public void changeStatusColor() {
//如果当前的Android系统版本大于4.4则更改状态栏颜色
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Log.i("SkinBaseActivity", "changeStatus");
int color = SkinManager.getInstance().getColorPrimaryDark();
StatusBarBackground statusBarBackground = new StatusBarBackground(
this, color);
if (color != -1)
statusBarBackground.setStatusBarbackColor();
}
}
@Override
public void dynamicAddView(View view, List<DynamicAttr> pDAttrs) {
mSkinInflaterFactory.dynamicAddSkinEnableView(this, view, pDAttrs);
}
protected void dynamicAddSkinEnableView(View view, String attrName, int attrValueResId) {
mSkinInflaterFactory.dynamicAddSkinEnableView(this, view, attrName, attrValueResId);
}
protected void dynamicAddSkinEnableView(View view, List<DynamicAttr> pDAttrs) {
mSkinInflaterFactory.dynamicAddSkinEnableView(this, view, pDAttrs);
}
final protected void enableResponseOnSkinChanging(boolean enable) {
isResponseOnSkinChanging = enable;
}
}