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。需要换肤的控件收集到一个容器中并且不更改自己的逻辑直接换肤(例如:不用在每个需要换肤的空间里面加上:“应用程序:……”,自定义控件属性)

思考:

(1)安装的apk的id与皮肤id是否一样?

(2)图片的资源,颜色资源都对应R自动生成的id

(3)皮肤包的资源id、R文件的资源id以及应用里R文件的资源的id是否是一样的?——是不一样的

3。一个活动有多个控件(SkinView),一个控件对应多个换肤属性(SkinItem)

 Android实现apk插件方式换肤的实例

SkinItem来封装这些值:

attrName -属性名(背景)attrValue -属性值id十六进制(@color/colorPrimaryDark) attrType——类型(颜色)id (R文件的id)

class  SkinItem {//才能,attrName 背景   String 才能;attrName;      int 才能;refId;//才能,资源名字,@color/colorPrimaryDark   String 才能;attrValue;//才能,drawable 颜色   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 ;   private 才能;List< SkinItem>,列表,,//收集需要换肤的集合      public 才能SkinView (View 看来,,List,列表),{   ,,this.view =,观点;   ,,this.list =,列表;   ,,}   以前,}

4。收集完毕后,应用换肤(xml加载过程中换肤)

,  Android实现apk插件方式换肤的实例

创建SkinManager去获得皮肤apk,应用通过SkinManager获取皮肤apk

(1)加载皮肤包(loadSkin):通过反射获得AsserManager的addAssetpath()方法,再通过这个方法获得皮肤apk,从而实例化skinResource;再通过PackageManager.getPackageArchiveInfo(路径,PackageManager.GET_ACTIVITIES) .packageName;获得皮肤包名

(2)获取颜色(色鬼):判断skinResource是否为空;拿到res的名字,如:通过“colorAccent”去寻找id

Android实现apk插件方式换肤

感谢各位的阅读!关于“Android实现apk插件方式换肤的实例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

Android实现apk插件方式换肤的实例