-
***思考一下:當我們早上將我們的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
提交
取消