-
***思考一下:当我们早上将我们的app换上一套红色的皮肤,那么下午我们再次打开的时候是不是也应该是红色的皮肤。 那么应该在哪里进行设置处理呢? -- injectSkin()即onCreat()一开始启动的时候就需要检测查看全部
-
**ISkinChangedListener实际上是我们的Activity对象,其生命周期不长,也就是说对于我们的Activity产生了一个强应用 那么必然会造成内存泄漏的问题。如何解决呢? 1、创建一个List<ISkinChangedListener>对象,该对象有什么用呢?大家可以想一下,我们的Activity对于换肤都有一个 注册和反注册的关系 2、添加注册和反注册的回调。查看全部
-
onDestory()执行后将所有的强应用给消除掉查看全部
-
添加反注册声明查看全部
-
添加注册声明查看全部
-
类似于观察者模式,那么每个Activity先注册,然后反注册。查看全部
-
!!!查看全部
-
!!!查看全部
-
***skinAttrs.isEmpty()为true的话,说明没有任何属性是以skin_开头的,也就是说这个view是不需要进行换肤的。 为什么将该if语句放在try-catch之后而不是之前呢?-因为这里的setFactory把我们AppCompat的setFactory给覆盖了, 那么也就是说我们在布局文件中写的view不管需不需要换肤,理论上有需要经过appcompt factory的工作,也就是我们 所写的这些反射操作。然后接下来才是我们自己需要做的事情。 比如说一个TextView,其不需要换肤,但是还是有必要去执行appcompt factory的工作。所有把检测作用的if语句放在 try-catch的后面。查看全部
-
!!!查看全部
-
!!!查看全部
-
**getSkinViews() -- 根据key去取List<SkinView> **新建两个方法查看全部
-
!!!查看全部
-
***对于一个Activity来说,其肯定对应着许多SkinView 即我们每一个Activity对应着一个SkinView的List集合,那么一个应用中有很多的Activity,那这样的话当任意一个 Activity触发换肤的事件之后,此时存在的其它Activity需要换肤的都需要换肤,那么这样说的话,我们的SkinView 和Activity之间的关系应该是个键值对的关系。那么维护这个键值对的Map呢,应该交由我们的一个全局的类去处理。--SkinManager ***当我们的Activity发生换肤的时候,应该给换肤的这些Activity增加一个回调,那么用户就可以得知谁换肤了。 所以Map集合的键利用一个统一的接口查看全部
-
!!!查看全部
举报
0/150
提交
取消