如何收集View?
利用Factory2捉腥,接管View的實(shí)例化流程氓拼,內(nèi)部使用反射進(jìn)行創(chuàng)建,并記錄View的屬性。
什么時(shí)候收集View桃漾?
onCreate 方法中坏匪,添加自定義創(chuàng)建View工廠,運(yùn)行setContentView之后會(huì)將運(yùn)行自定義View工廠進(jìn)行view的實(shí)例化和記錄撬统。
如何記錄View的屬性适滓?
遍歷AttributeSet中獲取屬性,如果遍歷的屬性為設(shè)定好需要換膚的屬性恋追,獲取對(duì)應(yīng)屬性值進(jìn)行判斷凭迹。如果#開頭為寫死,不需要苦囱;如果是嗅绸?或者@開頭則獲取屬性ID值。
插件APK包如何生成撕彤?
debug包即可朽砰,只有res資源文件。
如何加載插件Apk包資源喉刘?
反射調(diào)用AssetManager中的addAssetPath 瞧柔,傳入apk包路徑,然后調(diào)用Resources獲取插件包資源睦裳,記錄路徑包地址造锅。
如何記錄是否換膚?
SharedPreferences記錄廉邑,加載插件包后修改為已加載哥蔚,加載原資源修改為未加載。
如何修改屬性蛛蒙?
獲取本地資源和插件包資源糙箍,獲取每個(gè)View和已記錄的屬性名,判斷當(dāng)前是否加載插件包資源來加載對(duì)應(yīng)資源牵祟。
自定義View怎么自定義換膚深夯?
自定義View繼承一個(gè)接口,一鍵換膚時(shí)候判斷控件 instanceof诺苹,然后調(diào)用接口方法咕晋,方法再自定義View中實(shí)現(xiàn),并
誰通知誰換膚收奔?如何做到掌呜?
換膚管理者【】通知換膚工廠進(jìn)行換膚,換膚工廠【Observer】通知View進(jìn)行換膚坪哄。
觀察者模式质蕉。
最大支持SDK版本到(28)
需要用到什么類势篡?
1、 記錄狀態(tài)值的類【SkinPreference】
2模暗、 記錄View和屬性值的類【SkinAttribute】
3禁悠、 保存類和屬性值的類【SkinView、SkinPair】
4汰蓉、 繼承Factory2绷蹲,創(chuàng)建View的類【SkinLayoutInflaterFactory】
5棒卷、 生命周期類顾孽,用于加載某界面時(shí)候進(jìn)行view記錄的類【SkinActivityLifecycle】
6、 管理換膚功能和狀態(tài)值的類【SkinManager】
7比规、 自定義View用于換膚的接口【SkinViewSupport】
8若厚、 獲取資源內(nèi)容的類【SkinResources】
9、 狀態(tài)欄變化的類【SkinThemeUtils】