Android-skin-loader 換膚總結

前言

最近有個換膚的需求。基于github上的這個開源框架Android-Skin-Loader這個框架的換膚機制是使用動態加載的機制去加載皮膚包里面的內容,所謂的皮膚包是實際上是一個apk文件,里面無需任何java代碼。只要把和需要換膚的apk相同文件名的資源文件添加到res文件夾底下即可。(后面會針對怎么制作皮膚包做一個詳解)

本文提供了源代碼的下載,對急于想使用干貨的童鞋很有幫助,只要認真看完肯定就能上手。

對于這個框架的源碼分析暫不做研究,感興趣的童鞋前往此處?Android主題換膚 無縫切換。同時也感謝作者的資源分享!

好了,廢話不多bb。現在我們開始研究如何使用干貨。

1 下載基本的android-skin-loader的文件

百度網盤?提取碼: dbje?

同時也歡迎下載自己的github開源項目,里面包含了換膚等其他效果 。

github.com/xmrkwzw/rxRetrofit-master

2Application繼承SkinBaseApplication


3對需要使用的view添加標志

有兩種方式 1)在xml文件中添加 skin:enable="true"


注意xmln:skin的配置

2)那么有的人會有一個疑問,如果我的view是動態添加的呢?別急,作者也想到了這個需求,我們也可以動態的添加標識。


我們看下這個方法


第一個參數:需要換膚的view、第二個參數:類型名、第三個參數是資源文件id

主要是第二個參數:類型名


實際上這個是可以自定義的,關于自定義皮膚屬性下面會講。

4使用換膚功能的activity繼承SkinBaseActivity


當然如果是fragment就繼承SkinBaseFragment

5換膚


我們可以看到真正使用的是load方法,第一個參數是資源路徑,第二個參數是回調。

可以看到這里做的是本地資源保存然后我將他寫入了根目錄下。當然這里使用線上下載也是同樣的道理,相信不是什么問題。只是這里為了方便所以用了本地的,建議換膚前先下載 xxxx.skin文件到手機外存儲。

好了,大概的使用就這樣。

付加:

1此處我們對上文提到的自定義皮膚屬性進行研究。


其中我們看到既然有background那么我們是否可以對ImageView設置前景圖片src呢? ?答案是肯定的。

我們模仿他寫了一個SRC=“src".

調用get的方法

注意條件 AttfFactory.isSuppotesAttr(attrName) 這句話從字面上可以知道是匹配屬性名是否支持提供的幾個皮膚屬性。如果匹配比如:src則返回SrcAttr。


SrcAttr ?這個類是我們自定義的我們接下去看


自定義皮膚屬性總結:

原理還需要看源碼,上面的幾張圖的代碼是主要所在。

如果只看功能的實現:首先要自定義一個類繼承SkinAttr 如上圖。接著在AttrFactory的get方法中添加返回。

需要注意的是比如我的imageview設置src,一定要加上skin:eanble="true"或者動態添加。理由如下:

如上圖可看出在返回view之前做了一步篩選,如果沒有設置enable則直接過濾。


2 皮膚文件的制作

皮膚文件實際上是一個只包含了資源文件不需java代碼的pak文件

1首先創建一個新的project將和需要換膚的原apk中同名的資源文件導入。比如原apk中有一個需要換膚的textview字體顏色是@color/white 那么新的project一定要存在一個同名的資源文件至于顏色那就根據實際重新設置了。

2導出project的apk文件 改名為xxxx.skin


3將xxxx.skin文件寫入本地作為本地換膚或者扔給服務器讓他們提供一個地址下載到本地作為線上換膚,如果修改文件大的話肯定是建議后者。

bug:

目前發現的bug不多

1: 如果你的應用是全屏的,當發現在application初始化換膚設置(也就是換膚可以實行的操作)就會發現出現狀態而導致無法全屏

解決方法: 代碼研究后發現在SkinBaseActivity中有個changeStatusColor(),系統默認4.4以上都會修改狀態欄的顏色。于是把他注釋掉就可以實現全屏的需求了。

2:細心的童鞋其實還會發現一個問題,比如我一個ImageView背景是根據條件的設置的比如條件1: 背景R.drawable.icon1 ? 條件2:背景是R.drawable.icon2那現在就有一個問題了。上文提到的皮膚包設置的資源文件名字必須和原始的一樣,那這種情況我要怎么設置名字呢?

解決方法: 實際上上文也提過一個動態添加皮膚view的方式。凡是類似這種需求的都用動態添加的方式

dynamicAddSkinEnableView(View view,String attrName, intattrValueResId)

該方法包括了動態添加修改標志以及設置了設置了資源,所以無需重新設置背景或者顏色。

另外

SkinManager.getInstance.notifySkinUpdate();耗時操作,記得一定要慎用!

好了,以上就是基本的換膚操作,有什么不明白的可以查閱其他資料。認真看完寫個demo實現吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,740評論 25 708
  • 前言: 本文主要講述如何在項目中,在不重啟應用的情況下,實現動態換膚的效果。換膚這塊做的比較好的,有網易云音樂,q...
    Yagami3zZ閱讀 13,693評論 5 51
  • 今天再給大家帶來一篇干貨。 Android的主題換膚 ,可插件化提供皮膚包,無需Activity的重啟直接實現無縫...
    _SOLID閱讀 99,910評論 147 1,120
  • 終于找到一個可以隨意寫自己想法的app。 不論別人覺得自己是zz還是sb。 只寫自己想的, 雖然永遠做不到,只做自...
    小善緣max閱讀 128評論 0 1
  • 創建源文件 新建文件夾Demo 新建源碼文件夾src 新建main.c 初始目錄: 執行命令 cat /src/m...
    ashura_閱讀 814評論 0 0