美文网首页
Android动态换肤研究(一)

Android动态换肤研究(一)

作者: 美乃滋酱啊 | 来源:发表于2016-10-31 10:53 被阅读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、缺点
    • 不能配置一些自定义的属性;
    • 无法对不同的View的相同的颜色属性(譬如:TextView)配置出不用的颜色值。

    相关文章

      网友评论

          本文标题:Android动态换肤研究(一)

          本文链接:https://www.haomeiwen.com/subject/wgxputtx.html