Android 换肤方案详解(一)

引言

在我们的开发中,也许有些项目会有换肤的需求,这个时候会比较头疼怎么做才能做到一键换肤呢?大家肯定希望越简单越好。下面我们基于Github上比较受欢迎的Android-Skin-Loader框架分析一下换肤的本质是什么?

原理

换肤,其本质无非就是更换页面元素(view或viewGroup)的属性值,这些属性值都是可以用资源文件表示的,换句话说换肤其实就是替换掉资源文件。比如换个背景,换个文字颜色等。

先看一组换肤:
在这里插入图片描述
分析上面的平板应用换肤其中的一个页面,绿色和蓝色风格只有背景图片、控件颜色改变了。

再看一张控制流程图了解大概思路:
在这里插入图片描述
上图大致讲解了换肤的原理,即通过对页面下的所有view重新设置一遍资源文件,而这些资源文件我们可以把它制作成皮肤包(即apk)。

也许通过上面这张流程图你还是不能完全看懂每一个工作流程,下面配合代码详细介绍一下:

  1. 遍历页面下所有元素及其属性集合
    通过在页面(Activity、FragmentActivity)中设置Factory,该Factory能拿到页面下所有viewattrs

    Activity / FragmentActivity

    	/**
    	 * SkinInflaterFactory是自定义的Factory,实现了android.view.LayoutInflater.Factory
    	 * 创建view的事情委托给自定义工厂
    	 */
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
         
    		super.onCreate(savedInstanceState);
    		SkinInflaterFactory mSkinInflaterFactory = new SkinInflaterFactory();
    		getLayoutInflater().setFactory(mSkinInflaterFactory);
    	}
    

    SkinInflaterFactory

    	/**
    	 * SkinInflaterFactory在onCreateView()方法完成了view的创建
    	 * 我们可以在该方法中获取view和view的属性集AttributeSet
    	 * 
    	 * @param name view的类名全称 例如:1.android.widget.TextView 2.android.view.View等
    	 * @param context 上下文 
    	 * @param attrs xml中该view的属性
    	 */
    	@Override
    	public View onCreateView(String name, Context context, 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值