本文将介绍如何实现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>
GreenSkin
与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>
我们知道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。代码如下:
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;
}
}
});
}
}
分享到:
相关推荐
Android界面主题切换源码分享,欢迎下载!! 功能介绍:http://blog.csdn.net/u010297063/article/details/13760163
Android切换界面皮肤代码,轻松实现换肤功能
Android UI界面之切换主题的实现代码,在安卓手机中,这是个比较有用且比较基础的功能,无刷新切换android系统默认的窗口风格,这个你知道的,这是个简单的测试例子。
通过LayoutInflater.Factory实现主题切换功能,详见:http://blog.csdn.net/llew2011
本项目是一个有历史记录和主题切换的安卓计算器项目源码,有比较复杂的布局和SQLite应用,整个项目分了好几个层。 主要功能: 1、切换日光夜间模式 2、记录每次计算的过程和结果 (添加、删除数据库) 3、按钮...
上一篇说到一键切换应用的主题颜色,那么今天就继续来讲一讲如何实现应用的有些图标也一样能够跟随应用的主题颜色切换而改变图标的颜色。比如应用首页的一些固定的展示图标,或者是单选框以及复选框的图标,还有一些...
android 使用kotlin语言,切换主题功能,权限申请功能,android.support.v4.widget.NestedScrollView和android.support.design.widget.CoordinatorLayout结合显示。附赠缓存类Preference的使用。
主要介绍了Android开发实现切换主题及换肤功能,涉及Android界面布局与样式动态操作相关实现技巧,需要的朋友可以参考下
Android手指滑动切换页面 换皮肤.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
一般我们需要改变整个应用的背景颜色可以直接这样设置getWindow().getDecorView().setBackgroundColor(int color)。但是这种方式显然不是我们想要的,而且还有许多不好的地方。为什么呢?第一、它会把整个页面的背景...
多语言 切换,android 国际化 语言切换,感觉不错 挺好的demo.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
MultipleTheme Android换肤/夜间模式的Android框架.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
相信大家都使用过android各种定制系统中的多主题功能,本PPT能让大家对多主题换肤之图标动态资源替换原理有基本的认识
现在很多App都有夜间模式,特别是阅读类的App,夜间模式现在已经是阅读类App的标配了,事实上,日间模式与夜间模式就是给App定义并应用两套不同颜色的主题,用户可以自动或者手动的开启,今天用Android自带的support...
Android Theme界面换肤应用实例,也就是更改系统主题风格,可在“应用透明背景的主题”、“应用布景主题1”、“应用布景主题2”三种皮肤风格之间切换,Android换肤对Android手机来说是再简单不过的功能了,个性化...
4. 按钮样式切换(两套主题) 截图: 开源协议 Apache 2.0 Copyright (c) 2015-2099, 绝恋。。(juelian96) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in ...
图像切换器(ImageSwitcher) 功能和用法 104 2.4.12 画廊视图(Gallery)的功能和 用法 107 2.5 对话框 110 2.5.1 使用AlertDialog创建简单 对话框 110 2.5.2 使用AlertDialog创建列表 对话框 ...
程序多任务性能优秀,切换迅速等。当然,它也具有系统细节不完善、电源管理不好、软件的界面不太好、支持的软件厂商还比较少等缺点。但是凭借谷歌公司的强大实力以及与开放手机联盟的通力合作,我们相信Android会...