Android动态换肤研究(一)

2016-10-31  本文已影响91人  美乃滋酱啊

动态改变View的Color等值

SkinWizard

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

1、主要思路

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

2、 style配置
<!-- skin -->
 <style name="Default">
     <item name="android:textColor">#0000FF</item>
     <item name="android:background">@color/colorAccent</item>
 </style>

 <style name="BlackNight">
     <item name="android:textColor">#0FF0F0</item>
     <item name="android:background">#f7f700</item>
 </style>

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

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

来获取。

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

    private ArrayList<SkinItem> 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、缺点
上一篇 下一篇

猜你喜欢

热点阅读