Android-skin-loader 換膚總結(jié)

前言

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

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

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

好了,廢話不多bb〕砘澹現(xiàn)在我們開始研究如何使用干貨侦鹏。

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

百度網(wǎng)盤?提取碼: dbje?

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

github.com/xmrkwzw/rxRetrofit-master

2Application繼承SkinBaseApplication


3對需要使用的view添加標(biāo)志

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


注意xmln:skin的配置

2)那么有的人會有一個疑問略水,如果我的view是動態(tài)添加的呢?別急劝萤,作者也想到了這個需求聚请,我們也可以動態(tài)的添加標(biāo)識。


我們看下這個方法


第一個參數(shù):需要換膚的view稳其、第二個參數(shù):類型名驶赏、第三個參數(shù)是資源文件id

主要是第二個參數(shù):類型名


實(shí)際上這個是可以自定義的,關(guān)于自定義皮膚屬性下面會講既鞠。

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


當(dāng)然如果是fragment就繼承SkinBaseFragment

5換膚


我們可以看到真正使用的是load方法煤傍,第一個參數(shù)是資源路徑,第二個參數(shù)是回調(diào)嘱蛋。

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

好了凶伙,大概的使用就這樣郭毕。

付加:

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


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

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

調(diào)用get的方法

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


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


自定義皮膚屬性總結(jié):

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

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

需要注意的是比如我的imageview設(shè)置src电禀,一定要加上skin:eanble="true"或者動態(tài)添加。理由如下:

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


2 皮膚文件的制作

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

1首先創(chuàng)建一個新的project將和需要換膚的原apk中同名的資源文件導(dǎo)入蛤育。比如原apk中有一個需要換膚的textview字體顏色是@color/white 那么新的project一定要存在一個同名的資源文件至于顏色那就根據(jù)實(shí)際重新設(shè)置了宛官。

2導(dǎo)出project的apk文件 改名為xxxx.skin


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

bug:

目前發(fā)現(xiàn)的bug不多

1: 如果你的應(yīng)用是全屏的底洗,當(dāng)發(fā)現(xiàn)在application初始化換膚設(shè)置(也就是換膚可以實(shí)行的操作)就會發(fā)現(xiàn)出現(xiàn)狀態(tài)而導(dǎo)致無法全屏

解決方法: 代碼研究后發(fā)現(xiàn)在SkinBaseActivity中有個changeStatusColor(),系統(tǒng)默認(rèn)4.4以上都會修改狀態(tài)欄的顏色咕娄。于是把他注釋掉就可以實(shí)現(xiàn)全屏的需求了亥揖。

2:細(xì)心的童鞋其實(shí)還會發(fā)現(xiàn)一個問題,比如我一個ImageView背景是根據(jù)條件的設(shè)置的比如條件1: 背景R.drawable.icon1 ? 條件2:背景是R.drawable.icon2那現(xiàn)在就有一個問題了圣勒。上文提到的皮膚包設(shè)置的資源文件名字必須和原始的一樣费变,那這種情況我要怎么設(shè)置名字呢?

解決方法: 實(shí)際上上文也提過一個動態(tài)添加皮膚view的方式圣贸。凡是類似這種需求的都用動態(tài)添加的方式

dynamicAddSkinEnableView(View view,String attrName, intattrValueResId)

該方法包括了動態(tài)添加修改標(biāo)志以及設(shè)置了設(shè)置了資源挚歧,所以無需重新設(shè)置背景或者顏色。

另外

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

好了,以上就是基本的換膚操作用含,有什么不明白的可以查閱其他資料矮慕。認(rèn)真看完寫個demo實(shí)現(xiàn)吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啄骇,一起剝皮案震驚了整個濱河市痴鳄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缸夹,老刑警劉巖夏跷,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哼转,死亡現(xiàn)場離奇詭異,居然都是意外死亡槽华,警方通過查閱死者的電腦和手機(jī)壹蔓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猫态,“玉大人佣蓉,你說我怎么就攤上這事∏籽” “怎么了勇凭?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長义辕。 經(jīng)常有香客問我虾标,道長,這世上最難降的妖魔是什么灌砖? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任璧函,我火速辦了婚禮,結(jié)果婚禮上基显,老公的妹妹穿的比我還像新娘蘸吓。我一直安慰自己,他們只是感情好撩幽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布库继。 她就那樣靜靜地躺著,像睡著了一般窜醉。 火紅的嫁衣襯著肌膚如雪宪萄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天榨惰,我揣著相機(jī)與錄音雨膨,去河邊找鬼。 笑死读串,一個胖子當(dāng)著我的面吹牛聊记,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恢暖,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼排监,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杰捂?” 一聲冷哼從身側(cè)響起舆床,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挨队,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谷暮,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年盛垦,在試婚紗的時候發(fā)現(xiàn)自己被綠了湿弦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡腾夯,死狀恐怖颊埃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝶俱,我是刑警寧澤班利,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站榨呆,受9級特大地震影響罗标,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜积蜻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一闯割、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浅侨,春花似錦纽谒、人聲如沸证膨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽央勒。三九已至不见,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間崔步,已是汗流浹背稳吮。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留井濒,地道東北人灶似。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像瑞你,于是被迫代替她去往敵國和親酪惭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,280評論 25 707
  • 前言: 本文主要講述如何在項(xiàng)目中者甲,在不重啟應(yīng)用的情況下春感,實(shí)現(xiàn)動態(tài)換膚的效果。換膚這塊做的比較好的,有網(wǎng)易云音樂鲫懒,q...
    Yagami3zZ閱讀 13,647評論 5 51
  • 今天再給大家?guī)硪黄韶洝?Android的主題換膚 嫩实,可插件化提供皮膚包,無需Activity的重啟直接實(shí)現(xiàn)無縫...
    _SOLID閱讀 99,715評論 147 1,120
  • 終于找到一個可以隨意寫自己想法的app窥岩。 不論別人覺得自己是zz還是sb甲献。 只寫自己想的, 雖然永遠(yuǎn)做不到谦秧,只做自...
    小善緣max閱讀 125評論 0 1
  • 創(chuàng)建源文件 新建文件夾Demo 新建源碼文件夾src 新建main.c 初始目錄: 執(zhí)行命令 cat /src/m...
    ashura_閱讀 804評論 0 0