Android 换肤指南

一、换肤方案

目前,市面上Android的换肤方案主要有Resource方案和AssetManager替换方案两种方案。

其中,Resource方案是用户提前自定义一些主题,然后将指定主题对应的 id 设置成默认的主题即可。而AssetManager替换方案,使用的是Hook系统AssetMananger对象,然后再编译期静态对齐资源文件对应的id数值。

1.1 Resource方案

Resource方案的原理大概如下:

1、创建新的Resrouce对象(代理的Resource)

2、替换系统Resource对象

3、运行时动态映射(原理相同资源在不同的资源表中的Type和Name一样)

4、xml布局解析拦截(xml布局中的资源不能通过代理Resource加载,LayoutInflater)

此方案的优势是支持String/Layout的替换,不过缺点也很明显:

  • 资源获取效率有影响
  • 不支持style、asset目录
  • Resource多出替换,Resource包装类代码量大

1.2 AssetManager方案

使用的是Hook系统AssetMananger对象,然后再编译期静态对齐资源文件对应的id数值,达到替换资源的目的。此种方案,最常见的就是Hook LayoutInflater进行换肤。

二、Resource换肤

此种方式采用的方案是:用户提前自定义一些主题,然后当设置主题的时候将指定主题对应的 id

猜你喜欢

转载自blog.csdn.net/xiangzhihong8/article/details/130294151