`
jcccn
  • 浏览: 2771 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android程序如何实现换肤?

阅读更多

 

原文链接:http://jcccn.me/post/50909144862/skins-on-android

 

安卓上换肤可以通过那些方式来实现呢?

 

源码下载地址:https://github.com/jcccn/Shared-Code/tree/master/Android/SkinTest

 

方式一:切换程序的语言版本。

     原理:系统根据一定的规则去资源文件夹res下寻找资源。通过改变程序的配置(比如语言或者地区),就能加载不同资源文件夹下面的资源,从而实现简单的换肤。

     实践:举例说明,我要通过中文(系统默认)和英文两个语言版本来实现换肤。首先增加两个资源文件夹drawable-en-mdpi和layout-en,如下图。当在默认的中文环境下,使用的是drawable-mdpi和layout下面的资源。切换至英文环境之后,程序则会使用drawable-en-mdpi和layout-en下面的资源,在这两个文件夹下找不到的时候才去使用默认的drawable-mdpi和layout下面的资源。

 

            截图

 

     要实现语言环境的切换,同时不改变系统的语言环境,我们就要改变当前应用的语言,使用Resources实例的updateConfiguration方法即可。示例代码如下:

 

     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); // 用于立即刷新界面
     }

 

     但是这种方式有一些局限性:只能更换本apk内置的资源且受限于语言种数;需要重新create activity等方式才能刷新界面;可能影响程序其他依赖于语言的元素。这种方式属于一种投机取巧的方法,不建议使用。

     总结:两步实现,第一步,增加不同语言版本的资源文件夹;第二步,程序内部切换语言。

 

方式二:安装主题apk。

     原理:通过获取其他程序的context来获取皮肤资源。我们知道android程序中要获取drawable、layout等资源,都要通过context.getResources().getXXX的方式。关键就在这儿了,如果我们可以拿到其他程序的context,那么那个程序就可以作为皮肤程序来提供资源给主程序使用了。android中两个程序相互读取数据的条件是:两个程序的共享用户id相同,通过AndroidManifest.xml中的android:sharedUserId属性配置;两个程序签名相同。想要改变皮肤时,改变提供资源的context为皮肤程序的context,然后刷新即可。

     实践:有一点要注意,要保证能正确获取到皮肤包中的资源,需要编译出来的皮肤包与主程序中的R.java文件一致,即资源对应要一致(主程序中有layout、color、drawable、value等多少类资源,皮肤包中也需要有相同数量的资源)。

 

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类的管理方式,详细实现方式后面再研究研究。

 

2
0
分享到:
评论

相关推荐

    Android皮肤资源内置实现换肤功能Demo

    该资源是 Android 应用实现换肤功能的demo程序,同时也是博客文章:http://blog.csdn.net/janice0529/article/details/39999727 中demo程序, 博客中有详细的demo程序设计介绍。

    apk方式实现android应用程序换肤

    在Android应用开发中,换肤功能能够为用户提供个性化的体验,增强用户对应用的喜好度。...总之,实现换肤功能是一项综合性的任务,需要结合资源管理、运行时加载、性能优化和安全策略等多个方面进行考虑。

    Android-Android主题换肤插件化换肤无缝切换

    "Android-Android主题换肤插件化换肤无缝切换"是一个专为Android应用程序设计的技术主题,它旨在实现动态的、插件化的皮肤更换,使得用户在不重启应用的情况下能够实现皮肤的平滑切换。以下是对这个主题的详细解释和...

    Android插件换肤Demo

    8. **性能优化**:在实现换肤功能的同时,需要注意性能的优化,如减少资源加载时间,避免不必要的内存消耗等。 虽然提供的Demo可能不完全适用于直接集成到项目中,但是它为开发者提供了一个学习和理解Android插件...

    android换肤实现

    在Android平台上,为应用实现换肤功能是一种提升用户体验和个性化设计的重要手段。"android换肤实现"这个主题涉及到了如何让应用程序可以根据用户的选择切换不同的界面风格,类似于流行的Go桌面应用。这种技术允许...

    android 换肤项目(可以实现随机换肤)

    在Android开发中,换肤功能是一项提升用户体验的重要特性,它允许用户根据个人喜好更改应用程序的外观和主题。这个“android换肤项目”就是一个专门针对这一需求的实现,它结合了Dialog和ImageButton,同时具备随机...

    Android插件换肤完整版

    以下是实现换肤的关键步骤: 1. **资源隔离**:将皮肤资源与主应用分离,通常存储在不同的APK或资源文件中,确保皮肤更换不影响主应用的正常运行。 2. **插件加载**:利用动态加载技术(如DexClassLoader)在运行...

    android换肤demo2

    在实现换肤功能时,需要确保只替换安全的资源,避免用户可以通过换肤机制访问到应用的敏感数据或破坏应用的正常功能。 总之,"android换肤demo2"项目为我们提供了一个学习和实践Android动态换肤的实例。通过研究和...

    android 换肤 eclipse 版本

    在给定的文件列表中,"appcompat_v7"就是Android Support Library的一个版本,它包含了ActionBarCompat和其他兼容性功能,对于实现换肤功能是必不可少的。 接下来,你需要在项目的res目录下创建多个values文件夹,...

    Android程序研发源码换肤.zip

    本文将深入探讨如何实现Android程序的源码换肤功能,包括核心概念、关键技术和最佳实践。 首先,我们需要理解换肤的本质:在不改变应用逻辑的情况下,通过替换UI资源来实现界面风格的切换。这涉及到对资源文件的...

    Android 动态换肤框架原理

    在Android应用开发中,动态换肤功能为用户提供了一种个性化的体验,允许用户根据个人喜好改变应用程序的主题颜色或样式。动态换肤框架的实现涉及多个技术层面,包括资源加载、主题解析、UI组件的更新等。本文将深入...

    Android动态换肤

    我们可以通过反射找到应用中的UI元素,然后设置它们的背景图片、颜色等属性,从而实现换肤。例如,可以使用`Class.forName()`方法获取指定类,然后调用`setResource()`等方法更改UI元素的资源。 3. **类加载器**: ...

    Android动态换肤_最新版

    在Android应用开发中,动态换肤是一项非常实用的技术,它允许用户在运行时改变应用程序的外观,提升用户体验。本文将详细解析"Android动态换肤_最新版"这一主题,包括其核心概念、实现原理以及如何在项目中进行实践...

    Android换肤demo

    本文将深入探讨如何在Android中实现换肤功能,并基于提供的"Android换肤demo"进行详细讲解。 首先,我们要理解Android换肤的基本原理。通常,换肤涉及到替换UI元素的颜色、图片和其他视觉元素。在Android中,我们...

    Android 主题换肤框架

    Android主题换肤框架基于资源替换技术,通过在运行时加载不同的主题资源来实现换肤。通常,它会包含一个默认主题和多个可选主题,用户选择新主题后,框架会动态地将应用的资源指向新主题的资源文件。 2. **核心...

    Android 动态换肤框架实现

    本文将深入探讨如何实现一个Android动态换肤框架,并基于提供的资源"SkinChangeDemo"进行详细解释。 一、动态换肤原理 动态换肤的基本原理是通过替换应用程序中的资源文件,如颜色值、图片、布局等。Android系统...

    android 换肤demo

    综上所述,"android 换肤demo"是一个关于Android动态换肤技术的实例,它通过动态替换资源、主题切换逻辑以及皮肤包处理等方法,实现了无需重启应用即可实时切换皮肤的效果。开发者可以参考这个demo,结合自己的项目...

    android 应用的换肤demo

    实现换肤功能的关键在于能够动态地更改当前活动的主题。在`ChangeThemeDemo`项目中,通常会有一个设置界面,用户可以选择不同的主题。在选择后,可以通过以下代码切换主题: ```java public void switchTheme...

    apk方式实现android应用换肤

    apk方式实现android应用程序换肤。 文章:http://blog.csdn.net/hailushijie/article/details/9454679

    android换肤包lib

    它可以帮助开发者快速实现换肤功能,提高用户满意度。 总的来说,"android-skin-loader"是一个强大的工具,它让Android应用的换肤功能变得更加简单和高效。通过合理地使用这个库,开发者可以轻松地为用户带来丰富的...

Global site tag (gtag.js) - Google Analytics