实现换肤功能的思路

来源:互联网 发布:软件找不到数据库文件 编辑:程序博客网 时间:2024/04/26 19:49

参考至:通过createPackageContext 实现皮肤打包成apk的demo

有一个应用需要3套皮肤:默认,红色,蓝色

思路:自定义red_skin,blue_skin两个项目,分别放入红色,蓝色皮肤,这两个项目只放入图片资源,没有其他代码。

默认皮肤所在的项目为代码所在的项目。

设置包名:

red_skin项目:com.myapp.red

blue_skin项目:com.myapp.blue

把以上3项目的android:sharedUserId值设为一样的,如

android:sharedUserId="com.myapp" (在AndroidManifest.xml中),并且这3个项目中的图片资源的名称都一致。

在主项目中(默认皮肤所在的项目):

如果当前选中的是红色皮肤,可以这样操作:

             Context friendContext  = this.createPackageContext("com.myapp.red",                            Context.CONTEXT_IGNORE_SECURITY);                View view = View.inflate(friendContext, R.layout.main, null);                setContentView(view);


上述代码表示根据包名获取红色皮肤所在包的上下文,然后用View.inflate(friendContext, R.layout.main, null);就可以把红色皮肤下的图片资源与当前layout绑定,实现换肤功能。

另外若想获取红色皮肤包下的某一张图片资源可以用以下方法调用:

friendContext.getResources().getIdentifier("imgId", "array", "com.myapp.red")