【移动应用开发技术】Android实现apk插件方式换肤的实例_第1页
【移动应用开发技术】Android实现apk插件方式换肤的实例_第2页
【移动应用开发技术】Android实现apk插件方式换肤的实例_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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”去寻找idAndroid实现apk

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论