这篇文章给大家分享的是有关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)
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加载过程中换肤)
,
创建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插件方式换肤的实例