Android动态换肤研究(一)

动态改变View的Color等值

SkinWizard

这个换肤库是在研究了android-skin-loader之后,作为学习笔记做出来的一个换肤库

1、主要思路

通过配置不同的“皮肤”(style)文件,通过加载不同的style文件,为每个需要设置颜色(皮肤)的View设置不同的颜色资源。

2、 style配置

 

 

如下,这样的资源文件可以通过

TypedArray typedArray = context.obtainStyledAttributes(styleResId, skinAttrs);

来获取。

3、使用LayoutInflater获取需要配置颜色的View
public class SkinInflateFactory implements LayoutInflater.Factory {

    private ArrayList mSkinItems = new ArrayList<>();
    private Context mContext;

    @Override
    public View onCreateView(String name, Context context, AttributeSet attrs) {

        mContext = context;
        // 解析出需要换肤的控件
        boolean skinChangeEnable = attrs.getAttributeBooleanValue(SkinConfig.SKIN_CHANGE_NAMESPACE, SkinConfig.SKIN_ATTRIBUTE_NAME, false);

        if (skinChangeEnable) {
            View view = createView(context, name, attrs);
            parseSkinAttrs(view, attrs);

            return view;
        }
        return null;
    }

onCreate中如果返回null则默认使用android自己的Inflate View的方法。

这里,通过获取需要换肤的View,缓存起来,然后现在需要换肤的时候动态读取配置就行了。

4、缺点
  • 不能配置一些自定义的属性;
  • 无法对不同的View的相同的颜色属性(譬如:TextView)配置出不用的颜色值。

你可能感兴趣的:(Android动态换肤研究(一))