您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Android如何實現(xiàn)apk插件方式換膚”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Android如何實現(xiàn)apk插件方式換膚”這篇文章吧。
1.什么時候換膚?
xml加載前換膚,如果xml加載后換膚,用戶將會看見換膚之前的色彩,用戶體驗不好。
2.皮膚是什么?
皮膚就是apk,是一個資源包,包含了顏色、圖片等。
3.什么樣的控件應(yīng)該進(jìn)行換膚?
包含背景圖片的控件,例如textView文字顏色。
4.皮膚與已安裝的資源如何匹配?
資源名字匹配
步驟:
1.xml加載前換膚,意味著需要將所需要換膚的控件收集起來。因此要監(jiān)聽xml加載的過程。
public class BaseActivity extends Activity { SkinFactory skinFactory; @Override protected void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); //監(jiān)聽xml生成的過程 skinFactory = new SkinFactory(); LayoutInflaterCompat.setFactory(getLayoutInflater(),skinFactory); }}
2.需要換膚的控件收集到一個容器中并且不更改自己的邏輯直接換膚(例如:不用在每個需要換膚的空間里面加上: “ app:...... ” 自定義控件屬性)
思考:
(1)安裝的apk的id與皮膚id是否一樣?
(2)圖片的資源、顏色資源都對應(yīng)R自動生成的id
(3)皮膚包的資源id、R文件的資源id以及app里R文件的資源的id是否是一樣的?——是不一樣的
3.一個activity有多個控件(SkinView)一個控件對應(yīng)多個換膚屬性(SkinItem)
SkinItem來封裝這些值:
attrName-屬性名(background)attrValue-屬性值id 十六進(jìn)制(@color/colorPrimaryDark)attrType--類型(color)Id(R文件的id)
class SkinItem{ // attrName background String attrName; int refId; // 資源名字 @color/colorPrimaryDark String attrValue; // drawable color String attrType; public SkinItem(String attrName, int refId, String attrValue, String attrType) { this.attrName = attrName; this.refId = refId; this.attrValue = attrValue; this.attrType = attrType; } public String getAttrName() { return attrName; } public int getRefId() { return refId; } public String getAttrValue() { return attrValue; } public String getAttrType() { return attrType; } }
SkinView:
class SkinView{ private View view; private List<SkinItem> list; //收集需要換膚的集合 public SkinView(View view, List<SkinItem> list) { this.view = view; this.list = list; } }
4.收集完畢后,應(yīng)用換膚 (xml加載過程中換膚)
創(chuàng)建SkinManager去獲得皮膚apk,app通過SkinManager獲取皮膚apk
(1)加載皮膚包(loadSkin):通過反射獲得AsserManager的addAssetpath()方法,再通過這個方法獲得皮膚apk,從而實例化skinResource;再通過PackageManager.getPackageArchiveInfo(path,PackageManager.GET_ACTIVITIES).packageName;獲得皮膚包名
(2)獲取顏色(getColor):判斷skinResource是否為空;拿到res的名字,eg:通過“colorAccent”去尋找id
以上是“Android如何實現(xiàn)apk插件方式換膚”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。