-
***思考一下:當(dāng)我們?cè)缟蠈⑽覀兊腶pp換上一套紅色的皮膚,那么下午我們?cè)俅未蜷_(kāi)的時(shí)候是不是也應(yīng)該是紅色的皮膚。 那么應(yīng)該在哪里進(jìn)行設(shè)置處理呢? -- injectSkin()即onCreat()一開(kāi)始啟動(dòng)的時(shí)候就需要檢測(cè)查看全部
-
**ISkinChangedListener實(shí)際上是我們的Activity對(duì)象,其生命周期不長(zhǎng),也就是說(shuō)對(duì)于我們的Activity產(chǎn)生了一個(gè)強(qiáng)應(yīng)用 那么必然會(huì)造成內(nèi)存泄漏的問(wèn)題。如何解決呢? 1、創(chuàng)建一個(gè)List<ISkinChangedListener>對(duì)象,該對(duì)象有什么用呢?大家可以想一下,我們的Activity對(duì)于換膚都有一個(gè) 注冊(cè)和反注冊(cè)的關(guān)系 2、添加注冊(cè)和反注冊(cè)的回調(diào)。查看全部
-
onDestory()執(zhí)行后將所有的強(qiáng)應(yīng)用給消除掉查看全部
-
添加反注冊(cè)聲明查看全部
-
添加注冊(cè)聲明查看全部
-
類(lèi)似于觀察者模式,那么每個(gè)Activity先注冊(cè),然后反注冊(cè)。查看全部
-
!!!查看全部
-
!!!查看全部
-
***skinAttrs.isEmpty()為true的話,說(shuō)明沒(méi)有任何屬性是以skin_開(kāi)頭的,也就是說(shuō)這個(gè)view是不需要進(jìn)行換膚的。 為什么將該if語(yǔ)句放在try-catch之后而不是之前呢?-因?yàn)檫@里的setFactory把我們AppCompat的setFactory給覆蓋了, 那么也就是說(shuō)我們?cè)诓季治募袑?xiě)的view不管需不需要換膚,理論上有需要經(jīng)過(guò)appcompt factory的工作,也就是我們 所寫(xiě)的這些反射操作。然后接下來(lái)才是我們自己需要做的事情。 比如說(shuō)一個(gè)TextView,其不需要換膚,但是還是有必要去執(zhí)行appcompt factory的工作。所有把檢測(cè)作用的if語(yǔ)句放在 try-catch的后面。查看全部
-
!!!查看全部
-
?。?!查看全部
-
**getSkinViews() -- 根據(jù)key去取List<SkinView> **新建兩個(gè)方法查看全部
-
!!!查看全部
-
***對(duì)于一個(gè)Activity來(lái)說(shuō),其肯定對(duì)應(yīng)著許多SkinView 即我們每一個(gè)Activity對(duì)應(yīng)著一個(gè)SkinView的List集合,那么一個(gè)應(yīng)用中有很多的Activity,那這樣的話當(dāng)任意一個(gè) Activity觸發(fā)換膚的事件之后,此時(shí)存在的其它Activity需要換膚的都需要換膚,那么這樣說(shuō)的話,我們的SkinView 和Activity之間的關(guān)系應(yīng)該是個(gè)鍵值對(duì)的關(guān)系。那么維護(hù)這個(gè)鍵值對(duì)的Map呢,應(yīng)該交由我們的一個(gè)全局的類(lèi)去處理。--SkinManager ***當(dāng)我們的Activity發(fā)生換膚的時(shí)候,應(yīng)該給換膚的這些Activity增加一個(gè)回調(diào),那么用戶就可以得知誰(shuí)換膚了。 所以Map集合的鍵利用一個(gè)統(tǒng)一的接口查看全部
-
!!!查看全部
舉報(bào)
0/150
提交
取消