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

Android实现apk插件方式换肤的实例讲解,第1张

概述Android实现apk插件方式换肤实例讲解 1.什么时候换肤? xml加载前换肤,如果xml加载后换肤,用户将会看见换肤之前的色彩,用户体验不好. 2.皮肤是什么? 皮肤就是apk,是一个资源包,包含了颜色.图片等. 3.什么样的控件应该进行换肤? 包含背景图片的控件,例如textView文字颜色. 4.皮肤与已安装的资源如何匹配? 资源名字匹配 步骤: 1.xml加载前换肤,意味着需要将所需要换肤的控件收集起来.因此要监听xml加载的过程. public class BaseActivity extends Activity { Ski

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插件方式换肤

以上就是本次介绍的全部知识点内容,感谢大家的学习和对我们的支持。

总结

以上是内存溢出为你收集整理的Android实现apk插件方式换肤的实例讲解全部内容,希望文章能够帮你解决Android实现apk插件方式换肤的实例讲解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145810.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存