Android应用切换主题代码
2012-01-04 21:09
344 查看
转自:http://hi.baidu.com/lupingloveyou/blog/item/ce75bc22483581e8d7cae21a.html
Form:http://dev.10086.cn/blog/?uid-3072-action-viewspace-itemid-880
本文将介绍如何实现Android应用的换主题功能。假设一个简单的场景:有2套主题,一套绿色,一套黑色的。应用界面就一个按钮,每点击一下,按钮和背景都切换为不同的主题,如当前为黑色主题,下一次就为绿色主题,再下一次为黑色,以此类推。
打开Eclipse,新建三个Android工程项目,名字分别为BlackSkin、GreenSkin和MainSkin。BlackSkin和GreenSkin分别对应黑色、绿色主题资源,MainSkin为主应用。
BlackSkin
该工程下没有任何代码,只是在res\drawable目录下放置2张图片,一张黑色的背景,一张黑色的按钮图片。接着修改AndroidManifest.xml文件。
GreenSkin
与BlackSkin项目一样,该工程下也没有任何代码,只是在res\drawable目录下放置2张图片,一张绿色的背景,一张绿色的按钮图片。接着修改AndroidManifest.xml文件。
我们知道Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户的(Android 系统是基于Linux)。所以不同APK(用户)间互相访问数据默认是禁止的,但是它也提供了2种APK间共享数据的形式:
1. Share Preference. / Content Provider
APK可以指定接口和数据给任何其他APK读取,需要自己实现接口和Share的数据.
2. Shared User id
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。所以默认就是可以互相访问任意数据。也可以配置成运行成不同的进程,同时可以访问其他APK的数据目录下的数据库和文件。就像访问本程序的数据一样。本文中的换主题功能就是通过这种方式来实现的。
MainSkin
该工程为主应用,我们新建立一个Activity类,叫MainActivity.java。代码如下:
Form:http://dev.10086.cn/blog/?uid-3072-action-viewspace-itemid-880
本文将介绍如何实现Android应用的换主题功能。假设一个简单的场景:有2套主题,一套绿色,一套黑色的。应用界面就一个按钮,每点击一下,按钮和背景都切换为不同的主题,如当前为黑色主题,下一次就为绿色主题,再下一次为黑色,以此类推。
打开Eclipse,新建三个Android工程项目,名字分别为BlackSkin、GreenSkin和MainSkin。BlackSkin和GreenSkin分别对应黑色、绿色主题资源,MainSkin为主应用。
BlackSkin
该工程下没有任何代码,只是在res\drawable目录下放置2张图片,一张黑色的背景,一张黑色的按钮图片。接着修改AndroidManifest.xml文件。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="net.toeach.blackskin" android:sharedUserId="net.toeach.MainSkin"> <uses-sdk android:minSdkVersion="3" /> </manifest> |
与BlackSkin项目一样,该工程下也没有任何代码,只是在res\drawable目录下放置2张图片,一张绿色的背景,一张绿色的按钮图片。接着修改AndroidManifest.xml文件。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="net.toeach.greenskin" android:sharedUserId="net.toeach.mainskin"> <uses-sdk android:minSdkVersion="3" /> </manifest> |
1. Share Preference. / Content Provider
APK可以指定接口和数据给任何其他APK读取,需要自己实现接口和Share的数据.
2. Shared User id
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。所以默认就是可以互相访问任意数据。也可以配置成运行成不同的进程,同时可以访问其他APK的数据目录下的数据库和文件。就像访问本程序的数据一样。本文中的换主题功能就是通过这种方式来实现的。
MainSkin
该工程为主应用,我们新建立一个Activity类,叫MainActivity.java。代码如下:
public class MainActivity extends Activity { private LinearLayout showBg; private Button btn; private Context greenSkinContext = null; private Context blackSkinContext = null; int flag = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { greenSkinContext = this.createPackageContext("net.toeach.greenskin", Context.CONTEXT_IGNORE_SECURITY); blackSkinContext = this.createPackageContext("net.toeach.blackskin", Context.CONTEXT_IGNORE_SECURITY); } catch (NameNotFoundException e) { e.printStackTrace(); } showBg = (LinearLayout) findViewById(R.id.linear_layout_1); btn = (Button) findViewById(R.id.btn_change_skin); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (flag == 0) { //访问GreenSkin下的资源 showBg.setBackgroundDrawable(greenSkinContext.getResources().getDrawable(R.drawable.bg)); btn.setBackgroundDrawable(greenSkinContext.getResources().getDrawable(R.drawable.btn_normal)); flag = 1; } else if (flag == 1) { //访问BlackSkin下的资源 showBg.setBackgroundDrawable(blackSkinContext.getResources().getDrawable(R.drawable.bg)); btn.setBackgroundDrawable(blackSkinContext.getResources().getDrawable(R.drawable.btn_normal)); flag = 0; }//end of if }); }//end of method }//end of class |
相关文章推荐
- Android中实现应用切换主题机制
- android 2种切换语言方式:应用内切换和随系统而切换 代码实现重启应用
- 关于Android应用多套主题切换
- 切换 iPhone 应用 UI 主题的代码例子
- Android 监听应用前/后台切换实例代码
- Android应用主题动态切换
- Android 应用换肤功能(白天黑夜主题切换)
- java中的观察者模式在android主题切换或者数据刷新时的应用
- Android中实现应用切换主题机制
- Android中实现应用切换主题机制
- Android学习之——切换应用主题实现日间和夜间效果的更换
- Android中实现应用切换主题机制
- Android中实现应用切换主题机制
- Android 应用换肤功能(白天黑夜主题切换)
- android进行主题切换不重启整个应用(style方式)
- android下apkplug通用主题(皮肤)切换解决方案之主应用-01
- android 6.0 应用主题切换
- Android 切换应用主题风格
- android 应用动态切换主题
- Android 应用主题切换