换肤学习

市面上换肤种类

  • 编译时换肤

   只有 白天 / 黑夜主题切换,如高德地图等,编译时已经确定好了几种皮肤,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所实例化控件的回调监听

    

 

posted @ 2019-10-09 11:06  织秋  阅读(117)  评论(0)    收藏  举报