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