上週有個朋友給建議說講講換膚吧,真巧這周公司的工做安排也有這個需求,換的地方之多之繁,讓人傷神死了。正所謂磨刀不誤砍柴工,先磨下刀,抽出一個工具類,寫了個關於換膚的簡單demo。 android
Android中換膚的實現有幾種方法,我使用的是讀取共享進程空間另外一apk中的資源的方法。大體的原理以下,讓你的app和一個只有資源文件的app運行在同一進程中,這樣你的app就能夠訪問另外一app的資源了。原理很簡單,下面咱們分步驟講解實現過程。 git
1、共享進程運行的空間 github
經過在兩個工程下的manifest根節點添加相同的android:sharedUserId屬性值,再者經過同一簽名文件打包,保證兩個app的簽名值同樣,這樣app就能運行於同一進程中了。這個是資源文件共享的前提。 微信
2、抽象實現資源共享的工具類 app
根據ReflectionUtil的方法區咱們能夠看到,它的做用有三個:getSkinContext基於包名構建一個Context的實例;getIdentifier則是基於包名、資源文件夾名、資源名獲取對應的資源id;最後color、drawable等方法是根據包名、資源名,返回可直接使用的資源值。 工具
3、使用實例 編碼
使用起來有點麻煩,當大量資源須要替換的話,編碼會很是麻煩。那看下面簡單的辦法 spa
今天的文章比較短,你們若有好的想法或者其餘換膚好的實現,請私信我,我會在下面幾天整理後繼續爲你們介紹。 .net
源碼地址:https://github.com/JackCho/SkinChangeDemo orm
若是以爲對你有所幫助,歡迎你們訂閱個人微信公衆帳號——Android乾貨分享(ID:android_share)。下面是微信的二維碼,爲你提供及時高質的Android乾貨。技術交流QQ羣:318588906,歡迎你們加羣,共同探討下Android和Java技術,一塊兒壯大咱們的微信乾貨分享社區。