Android程序如何实现换肤?
?
changeLanguage(Locale.ENGLISH); private void changeLanguage(Locale newLocale) { Resources resources = getResources(); Configuration config = resources.getConfiguration(); DisplayMetrics dm = resources.getDisplayMetrics(); config.locale = newLocale; resources.updateConfiguration(config, dm); this.onCreate(null); // 用于立即刷新界面 }?
Context skinContext = createPackageContext(skinPackageName, Context.CONTEXT_IGNORE_SECURITY);contentView.setBackgroundDrawable(skinContext.getResources().getDrawable(R.drawable.gloal_background));
?
?
方式三:使用皮肤资源zip包。
? ? ?原理:直接从文件(SD卡或者data目录)中读取资源文件并解码,然后设置给相关的控件。
? ? ?实践:实现方式可以是直接一个包含皮肤资源(图片、控制布局的一些数值文本文件等)的压缩包,通常后缀名被命名为自己独有的名字,比如搜狗的sga,百度的bds等,使用时被解压拷贝到手机存储上的皮肤文件夹里面;也可以是包含在一个单独的apk安装包里面,安装应用皮肤后皮肤压缩包(一般放在皮肤apk的asset目录下)被解压拷贝到data目录下以供使用。
? ? ?这种方式需要注意的一个地方就是内存管理的问题。一般是new一些bitmap或者BitmapDrawable之类的对象出来,在不再使用的时候要注意释放。一个思路是参照系统Resources类的管理方式,详细实现方式后面再研究研究。
?