读书人

施用换肤实现思路总结

发布时间: 2012-08-15 16:57:17 作者: rapoo

应用换肤实现思路总结

注:以下所有言论纯属个人主观分析。

?

换肤解决方案:
1.manifest.xml中设置android:sharedUserId,通过这种方式可以达到不用应用相互访问资源的目的,以实现换肤功能。
优点:可定期提供换肤包供下载,换肤方式灵活。
缺点:如需使用某个皮肤,必须安装该皮肤。

实现实例代码:

package com.test.android.skin.main;import android.app.Activity;import android.content.Context;import android.content.pm.PackageManager.NameNotFoundException;import android.os.Bundle;import android.widget.Button;public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Context friendContext = null;try {friendContext = this.createPackageContext("com.test.android.skin.myskin",Context.CONTEXT_IGNORE_SECURITY);} catch (NameNotFoundException e) {e.printStackTrace();}Button btn = (Button) findViewById(R.id.btn);if (friendContext == null) {//btn.setBackgroundResource(R.drawable.btn_background);} else {int id = friendContext.getResources().getIdentifier("btn_background", "drawable", friendContext.getPackageName());btn.setBackgroundDrawable(friendContext.getResources().getDrawable(id));}}}

?

?

?

2.一个应用中放置几个固定的皮肤,皮肤之间的控制由程序来控制实现。
优点:实现简单。
缺点:不够灵活,要增加新的皮肤需要更新应用。

实现实例:这个很简单,我觉得可以通过sharereference统一控制皮肤的前缀或者路径来实现一个通用的换肤目的。

?

3.zip压缩包式皮肤。应用可设置一个默认路径。如果用户选择某个皮肤,则解压该皮肤.zip到这个文件夹中。
优点:无需安装,即使卸载掉皮肤应用,该皮肤仍然可用,不会影响正常使用。
缺点:可能会因为用户的误操作,使皮肤文件损坏。

实现实例代码:
核心代码:解压文件,读文件

?

4.更改背景图片达到整体换肤的目的。这种实现方式比较简单。所有的activity都只有一个大背景,上边的所有内容都为透明样式。这样只需要更改一个背景颜色达到换肤的目的了。

读书人网 >移动开发

热点推荐