欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實(shí)現(xiàn)apk插件方式換膚的實(shí)例講解

 更新時(shí)間:2019年10月14日 14:15:48   作者:似魚(yú)  
在本篇文章里小編給大家整理的是關(guān)于Android實(shí)現(xiàn)apk插件方式換膚的實(shí)例代碼以及相關(guān)知識(shí)點(diǎn),有需要的朋友們學(xué)習(xí)下。

1.什么時(shí)候換膚?

xml加載前換膚,如果xml加載后換膚,用戶(hù)將會(huì)看見(jiàn)換膚之前的色彩,用戶(hù)體驗(yàn)不好。

2.皮膚是什么?

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

3.什么樣的控件應(yīng)該進(jìn)行換膚?

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

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

資源名字匹配

步驟:

1.xml加載前換膚,意味著需要將所需要換膚的控件收集起來(lái)。因此要監(jiān)聽(tīng)xml加載的過(guò)程。

public class BaseActivity extends Activity {

 SkinFactory skinFactory;

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState){
  super.onCreate(savedInstanceState);

  //監(jiān)聽(tīng)xml生成的過(guò)程
  skinFactory = new SkinFactory();
  LayoutInflaterCompat.setFactory(getLayoutInflater(),skinFactory);
 }
}

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

思考:

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

(2)圖片的資源、顏色資源都對(duì)應(yīng)R自動(dòng)生成的id

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

3.一個(gè)activity有多個(gè)控件(SkinView) 一個(gè)控件對(duì)應(yīng)多個(gè)換膚屬性(SkinItem)

SkinItem來(lái)封裝這些值:

attrName-屬性名(background)attrValue-屬性值id 十六進(jìn)制(@color/colorPrimaryDark)attrType--類(lèi)型(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加載過(guò)程中換膚)

 

 

創(chuàng)建SkinManager去獲得皮膚apk,app通過(guò)SkinManager獲取皮膚apk

(1)加載皮膚包(loadSkin):通過(guò)反射獲得AsserManager的addAssetpath()方法,再通過(guò)這個(gè)方法獲得皮膚apk,從而實(shí)例化skinResource;再通過(guò)PackageManager.getPackageArchiveInfo(path,PackageManager.GET_ACTIVITIES).packageName;獲得皮膚包名

(2)獲取顏色(getColor):判斷skinResource是否為空;拿到res的名字,eg:通過(guò)“colorAccent”去尋找id

Android實(shí)現(xiàn)apk插件方式換膚

以上就是本次介紹的全部知識(shí)點(diǎn)內(nèi)容,感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。

相關(guān)文章

  • Crashlytics Android 異常報(bào)告統(tǒng)計(jì)管理(詳解)

    Crashlytics Android 異常報(bào)告統(tǒng)計(jì)管理(詳解)

    下面小編就為大家?guī)?lái)一篇Crashlytics Android 異常報(bào)告統(tǒng)計(jì)管理(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Android實(shí)現(xiàn)View滑動(dòng)的幾種方式

    Android實(shí)現(xiàn)View滑動(dòng)的幾種方式

    Android中的View類(lèi)是所有UI控件的基類(lèi)(Base class),也就是說(shuō)我們平時(shí)所有到的各種UI控件,比如Button、ImagView等等都繼承自View類(lèi)。這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)View滑動(dòng)的幾種方式,需要的朋友可以參考下
    2016-04-04
  • Android利用Camera實(shí)現(xiàn)中軸3D卡牌翻轉(zhuǎn)效果

    Android利用Camera實(shí)現(xiàn)中軸3D卡牌翻轉(zhuǎn)效果

    這篇文章主要介紹了Android利用Camera實(shí)現(xiàn)中軸3D卡牌翻轉(zhuǎn)效果,需要的朋友可以參考下
    2015-12-12
  • Android開(kāi)發(fā)使用Messenger及Handler進(jìn)行通信的方法示例

    Android開(kāi)發(fā)使用Messenger及Handler進(jìn)行通信的方法示例

    這篇文章主要介紹了Android開(kāi)發(fā)使用Messenger及Handler進(jìn)行通信的方法,結(jié)合實(shí)例形式分析了Android使用Messenger及Handler定義客戶(hù)端與服務(wù)器端實(shí)現(xiàn)通信的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Android判斷登錄情況

    Android判斷登錄情況

    這篇文章主要介紹了Android判斷登錄情況,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Kotlin線程的橋接與切換使用介紹

    Kotlin線程的橋接與切換使用介紹

    這篇文章主要介紹了Android開(kāi)發(fā)中Kotlin線程的橋接與切換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Android 3.0引入的異步加載機(jī)制Loader

    Android 3.0引入的異步加載機(jī)制Loader

    Loader裝載器從android3.0開(kāi)始引進(jìn)。它使得在activity或fragment中異步加載數(shù)據(jù)變得簡(jiǎn)單。下面我們就來(lái)詳細(xì)講解下
    2017-12-12
  • Kotlin Flow常用封裝類(lèi)StateFlow使用詳解

    Kotlin Flow常用封裝類(lèi)StateFlow使用詳解

    這篇文章主要為大家介紹了Kotlin Flow常用封裝類(lèi)StateFlow使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • android嵌套滾動(dòng)入門(mén)實(shí)踐

    android嵌套滾動(dòng)入門(mén)實(shí)踐

    嵌套滾動(dòng)是 Android OS 5.0之后,google 為我們提供的新特性,本篇文章主要介紹了android嵌套滾動(dòng)入門(mén)實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Android自定義View實(shí)現(xiàn)垂直時(shí)間軸布局

    Android自定義View實(shí)現(xiàn)垂直時(shí)間軸布局

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)垂直時(shí)間軸布局的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評(píng)論