91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何實現apk插件方式換膚

發布時間:2021-09-27 11:14:36 來源:億速云 閱讀:147 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Android如何實現apk插件方式換膚”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Android如何實現apk插件方式換膚”這篇文章吧。

1.什么時候換膚?

xml加載前換膚,如果xml加載后換膚,用戶將會看見換膚之前的色彩,用戶體驗不好。

2.皮膚是什么?

皮膚就是apk,是一個資源包,包含了顏色、圖片等。

3.什么樣的控件應該進行換膚?

包含背景圖片的控件,例如textView文字顏色。

4.皮膚與已安裝的資源如何匹配?

資源名字匹配

步驟:

1.xml加載前換膚,意味著需要將所需要換膚的控件收集起來。因此要監聽xml加載的過程。

public class BaseActivity extends Activity { SkinFactory skinFactory; @Override protected void onCreate(@Nullable Bundle savedInstanceState){  super.onCreate(savedInstanceState);  //監聽xml生成的過程  skinFactory = new SkinFactory();  LayoutInflaterCompat.setFactory(getLayoutInflater(),skinFactory); }}

2.需要換膚的控件收集到一個容器中并且不更改自己的邏輯直接換膚(例如:不用在每個需要換膚的空間里面加上: “ app:...... ” 自定義控件屬性)

思考:

(1)安裝的apk的id與皮膚id是否一樣?

(2)圖片的資源、顏色資源都對應R自動生成的id

(3)皮膚包的資源id、R文件的資源id以及app里R文件的資源的id是否是一樣的?——是不一樣的

3.一個activity有多個控件(SkinView)一個控件對應多個換膚屬性(SkinItem)

SkinItem來封裝這些值:

attrName-屬性名(background)attrValue-屬性值id 十六進制(@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.收集完畢后,應用換膚 (xml加載過程中換膚)

創建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如何實現apk插件方式換膚”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛山市| 正定县| 隆化县| 屯留县| 公安县| 武清区| 镇雄县| 墨脱县| 平武县| 宁国市| 正阳县| 武威市| 始兴县| 镇宁| 西宁市| 来凤县| 江城| 红河县| 丹棱县| 瓦房店市| 平江县| 鸡西市| 巴中市| 南溪县| 灌阳县| 日照市| 平利县| 璧山县| 建始县| 微博| 合水县| 佛山市| 丽水市| 巨鹿县| 都匀市| 丰县| 台前县| 静海县| 汝南县| 凯里市| 大庆市|