换肤学习
市面上换肤种类
- 编译时换肤
只有 白天 / 黑夜主题切换,如高德地图等,编译时已经确定好了几种皮肤,UI表现为一个switcher,所有皮肤岁版本发布而确定。
缺点:比较死板,不能动态添加皮肤。如果再增加界面,同时需要做皮肤判断。
- 动态换肤
随时动态切换,根据用户喜好指定,后台随时发布,如网易云音乐等。
优势:可以多种主题切换,给用户一种新鲜感,增强用户粘性;增加APP美观度;为公司增加收入等。
问题
- 什么时候进行换肤?
xml加载前换肤。如果在xml加载后换肤,则用户会看到原先的皮肤设置,不利于用户体验。
- 皮肤是什么?
apk文件,apk本质上也是压缩文件,里面包含了资源、文字、颜色等。
- 什么样的控件应该进行换肤?
已经定义好了背景图片、背景颜色、文字颜色等的控件。 ( @color/red... @drawable/....)
如果使用的是默认设置,比如不设定color则为黑色,这样的控件不进行换肤。
- 皮肤与已安装的资源如何匹配
根据相同的资源名字到皮肤包匹配。
问题解决
- 怎么在xml加载前换肤?
在加载之前,应该先监听xml加载的过程,采集需要换肤的控件。
1 LayoutInflaterCompat.setFactory2( ); //会监听当前xml的生成过程
看看该方法的源码
1 public static void setFactory2(@NonNull LayoutInflater inflater, @NonNull LayoutInflater.Factory2 factory) {...}
//第一个参数为一个LayoutInflater,第二个参数LayoutInflater.Factory2为一个接口,接口里面不断回调onCreateView方法,onCreateView可以监听MainActivity所实例化控件的回调监听

浙公网安备 33010602011771号