`
yangzc106
  • 浏览: 154094 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

应用换肤实现思路总结

阅读更多

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

 

换肤解决方案:
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. */
	@Override
	public 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都只有一个大背景,上边的所有内容都为透明样式。这样只需要更改一个背景颜色达到换肤的目的了。

分享到:
评论
1 楼 qq408170918 2014-08-27  
楼主 请问下 “zip压缩包式皮肤” 这个 要怎么解压 怎么读啊  能给个demo吗???

相关推荐

Global site tag (gtag.js) - Google Analytics