`

教你怎么做可以换皮肤的软件

阅读更多
网上找了很久,未果。
偶然的机会,看到aiMinesweeper.HelloSkin的AndroidManifest.xml里有那么一个属性:android:sharedUserId="com.artfulbits.aiminesweeper"
顿时感到看到了阳光,马上google了一下,发现了关键的地方。

SharedUserid
拥有同一个User id的多个APK可以配置成运行在同一个进程中,所以默认就是可以互相访问任意数据。也可以配置成运行成不同的进程,同时可以访问其他APK的数据目录下的数据库和文件,就像访问本程序的数据一样。

哈哈,这个就是我要找的东西,马上开始试验。

工程1(主工程)
只有1个画面,包含1个为了测试用的button
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="com.test.android.skin.main" android:versionCode="1"
	android:versionName="1.0" android:sharedUserId="com.test.android.skin">

	<application android:icon="@drawable/icon" android:label="@string/app_name">

		<activity android:name=".MainActivity" android:label="@string/app_name">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>

	</application>

</manifest>


MainActivity
	@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);
		btn.setBackgroundDrawable(friendContext.getResources().getDrawable(
				R.drawable.btn_background));
	}


drawable下放一张名为btn_background.pnd的图片

工程2(皮肤工程)
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="com.test.android.skin.myskin" android:versionCode="1"
	android:versionName="1.0" android:sharedUserId="com.test.android.skin">

	<application android:icon="@drawable/icon" android:label="@string/app_name">

		<activity android:name=".MainActivity" android:label="@string/app_name">

			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>

		</activity>

	</application>

</manifest> 


drawable下也放一张名为btn_background.png的图片(换成xml文件就可以实现不同状态不同图片的功能)

把2个工程都安装到模拟器上以后,运行工程1,button上的图片果然是工程2中的btn_background.png,终于成功了。

测试代码(主工程和皮肤工程)已上传,没写注释望见谅。
  • 描述: 未安装皮肤工程
  • 大小: 8.9 KB
  • 描述: 安装皮肤工程后
  • 大小: 8.7 KB
分享到:
评论
12 楼 clm86 2011-08-15  
dai_lm 写道
clm86 写道
dai_lm 写道
clm86 写道
你好,我想问一下,你还有没有研究换肤的。我看了一下你这个,这样换肤是不是要在手机上再装上新皮肤的应用。要是要换到默认的皮肤不就控制不了。。。

这个逻辑就看各人怎么控制了,一般的做法是把皮肤的package存到数据库,然后切换。

那不知你是怎么实现的。能否提点一下

我没有做。
如果你想做,你可以
1. 开发主程序的时候,允许其他应用调用你的数据库(用URI,网上搜一下)
2. 安装皮肤程序的时候,通过接口往你的数据库添加package名
3. 在主程序里,添加一个dialog,可以把数据库里已添加的皮肤显示出来,供切换
4. 如果切换到默认皮肤,只要把相应的变量设成某某值(例如:DEFAULT)就可以了

希望对你有所帮助

好的,谢谢了。我试试去
11 楼 dai_lm 2011-08-15  
clm86 写道
dai_lm 写道
clm86 写道
你好,我想问一下,你还有没有研究换肤的。我看了一下你这个,这样换肤是不是要在手机上再装上新皮肤的应用。要是要换到默认的皮肤不就控制不了。。。

这个逻辑就看各人怎么控制了,一般的做法是把皮肤的package存到数据库,然后切换。

那不知你是怎么实现的。能否提点一下

我没有做。
如果你想做,你可以
1. 开发主程序的时候,允许其他应用调用你的数据库(用URI,网上搜一下)
2. 安装皮肤程序的时候,通过接口往你的数据库添加package名
3. 在主程序里,添加一个dialog,可以把数据库里已添加的皮肤显示出来,供切换
4. 如果切换到默认皮肤,只要把相应的变量设成某某值(例如:DEFAULT)就可以了

希望对你有所帮助
10 楼 clm86 2011-08-14  
dai_lm 写道
clm86 写道
你好,我想问一下,你还有没有研究换肤的。我看了一下你这个,这样换肤是不是要在手机上再装上新皮肤的应用。要是要换到默认的皮肤不就控制不了。。。

这个逻辑就看各人怎么控制了,一般的做法是把皮肤的package存到数据库,然后切换。

那不知你是怎么实现的。能否提点一下
9 楼 dai_lm 2011-08-12  
clm86 写道
你好,我想问一下,你还有没有研究换肤的。我看了一下你这个,这样换肤是不是要在手机上再装上新皮肤的应用。要是要换到默认的皮肤不就控制不了。。。

这个逻辑就看各人怎么控制了,一般的做法是把皮肤的package存到数据库,然后切换。
8 楼 clm86 2011-08-11  
你好,我想问一下,你还有没有研究换肤的。我看了一下你这个,这样换肤是不是要在手机上再装上新皮肤的应用。要是要换到默认的皮肤不就控制不了。。。
7 楼 dai_lm 2011-04-18  
live17909 写道
同一个工程里就包含了多套皮肤,那么切换就更简单?怎么切换呢,代码可以控制drawable不同文件夹的显示吗?drawable文件夹的图片不是系统自适应显示的吗


/guide/topics/resources/drawable-resource.html#LevelList
我想你可以参考这个,通过设定不同的level值,就可以调用不同的drawable,可能这个可以满足你的要求
6 楼 live17909 2011-04-18  
同一个工程里就包含了多套皮肤,那么切换就更简单?怎么切换呢,代码可以控制drawable不同文件夹的显示吗?drawable文件夹的图片不是系统自适应显示的吗
5 楼 dai_lm 2011-04-12  
代码已上传,有需要的朋友可以下载
(水平有限,勿喷)
4 楼 live17909 2011-04-11  
主工程报图片资源找不到呢。是不是还漏了哪里
3 楼 live17909 2011-04-07  
能出源码吗
2 楼 dai_lm 2011-03-23  
恩,对的,的确是共享2个工程之间的资源
这样就可以创建一个只有默认皮肤的工程,一个单独的皮肤工程,调用皮肤工程的资源就可以改变Activity画面的主题,布局等。
如果想做多套皮肤,只要创建相应多的皮肤工程,然后安装就可以了。

如果是在同一个工程里就包含了多套皮肤,那么切换就更简单,直接代码控制就可以了。

当然这个只是自己的研究调查,如果有不对的地方,还请指教
1 楼 cqllang 2011-03-07  
感觉是sharedUserId共享两个程序之间资源的吧?

跟换皮肤好像关系不大?

相关推荐

    皮肤控件研究文档,破解后的库文件,皮肤设计工具使用教程

    控件的样式定义于XML中,你可以在xml中定义一张图片,并设置其在窗口的任何位置,包括标题栏区域,  产品升级及售后服务 DSkinLite界面库产品及服务: DSkinLite产品使用授权 软件界面开发服务 控件定制服务 ...

    剑儿价格比较软件 v2.6.rar

    7,按钮”使用帮助“你可以给我反馈或观看视频语音教程。 8,按钮“退出软件”即关闭本软件。 2012年12月17日 V2.6版本发布 1.优化了代码。 2.增加了更多商家商品搜索功能。 3.修改了价格统计显示方式,更加...

    开博送货单管理系统 4.92 中文免费版 生产管理送货单管理软件.zip

    软件的拓展性很强,不仅可以设计打印格式,还可以自定义表格列内容、表头显示标题、单据编号编排规则等等 支持各种尺寸的打印纸和套表打印(套打) 支持即录即打功能(不需要先建立客户资料、产品资料就可以开单) ...

    艾秀发型设计软件 v3.5.zip

    7. 集美容、美发功能于一体,进行发型设计的同时,还可以进行美容,抠图、克隆皮肤、磨皮袪痘、灯光渲染等展现靓丽皮肤,一键美容、一键磨皮更是能快速达到美容效果。 8. 制作贺卡,打印图片,精心挑选了各种背景、...

    wpf完全教程1-4章

    本书是针对那些对用户界面开发感兴趣的软件开发人员编写的,易于理解,适合那些.NET的新手,并有助于理解像Microsoft Expression Blend这样产品的精髓。  本书适合各层次Web开发人员阅读。 第一部分 背景 第1章 ...

    开博送货单管理系统(标准版)v2.20.rar

    支持操作界面皮肤自由切换功能,可以设置数据自动备份以及数据恢复功能。 支持产品资料管理、客户资料管理、销售管理流程、应收账款管理、银行收支管理。 正式版没有任何功能限制,终身免费升级、即时远程技术支持...

    精易编程助手 1.20.zip

    网页分析 → 穿透框架彻底分析网页元素,让你网页填表操作更加简单! 窗口探测 → 清晰的分析窗口中各种控件的ID,句柄,标题,类名,位置,大小! 生成代码 → 查找指定窗口控件,全智能生成易语言代码! 记 事 本 → ...

    开博进销存管理系统标准版 v3.1 中文版.zip

    9.软件的拓展性很强,不仅可以设计打印格式,还可以表格列内容、表头显示标题、单据编号编排规则自己定义等。 10.支持各种尺寸的打印纸和套表打印(套打)。 11.支持即录即打功能(不需要先建立客户资料、产品资料就...

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    vc++ 应用源码包_1

    但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动与关闭只要你想做的几乎都可以,因为WMI代替我们去与硬件打交到了,甚至是系统...

    vc++ 应用源码包_2

    但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动与关闭只要你想做的几乎都可以,因为WMI代替我们去与硬件打交到了,甚至是系统...

    vc++ 应用源码包_6

    但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动与关闭只要你想做的几乎都可以,因为WMI代替我们去与硬件打交到了,甚至是系统...

    vc++ 应用源码包_5

    但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动与关闭只要你想做的几乎都可以,因为WMI代替我们去与硬件打交到了,甚至是系统...

    vc++ 应用源码包_3

    但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动与关闭只要你想做的几乎都可以,因为WMI代替我们去与硬件打交到了,甚至是系统...

    vc++ 开发实例源码包

    但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动与关闭只要你想做的几乎都可以,因为WMI代替我们去与硬件打交到了,甚至是系统...

    Maven权威指南 很精典的学习教程,比ANT更好用

    关于Apache软件许可证 I. Maven实战 3. 一个简单的Maven项目 3.1. 简介 3.1.1. 下载本章的例子 3.2. 创建一个简单的项目 3.3. 构建一个简单的项目 3.4. 简单的项目对象模型 (Project Object Model) 3.5...

    (手动杀毒工具)PowerTool-v3.2

    还要特别感谢一下hi百度的uruan,特意为PowerTool做了一个非常漂亮的Logo,很喜欢这个Design,多谢了~~~ 应用平台:for WindowsXp/Windows2003/Vista/Windows7(32 bit)(我只在这四个上面测试过,其他的系统上可能...

    老板键-易语言

    还没做的隐藏,嵌入。屏蔽窗口音效这些。 后续源码不会放出,目前已经很完善了。软件会提交一些平台供使用。 已知BUG:窗口的获取问题。我要获取的是桌面的执行任务。通过窗口样式进行获取。会获取不到一些窗口例如QQ...

    [2010.10.14][封装工具][天空作品] Easy Sysprep v3 RC3(+ SkySRS3.00)

    再次重申报毒问题,封装软件肯定涉及系统深层的东西,还会修改部分系统文件与系统服务,被误报纯属正常(被某些国产杀毒误报就更正常不过了),微软官方杀毒没把ES3中任何一个文件当做病毒,大家可以自己尝试。...

Global site tag (gtag.js) - Google Analytics