`

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

阅读更多
网上找了很久,未果。
偶然的机会,看到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共享两个程序之间资源的吧?

跟换皮肤好像关系不大?

相关推荐

    vb皮肤制作教程!!!

    你可以使用Pen、Brush等对象绘制线条、填充颜色,并结合图片资源,实现个性化的皮肤效果。 3. **皮肤引擎**:市面上也有一些第三方的皮肤引擎库,如.NET Skin Framework、Visual Studio Skin Manager等。这些库提供...

    cSharp-skin.rar_c# 好看的皮肤_c# 皮肤_c#skinEngine皮肤_c#开发皮肤_手把手教你c#

    在软件开发中,皮肤是指可以改变用户界面外观的一组图形元素,如按钮、文本框、菜单等控件的样式。通过更换皮肤,开发者可以快速地改变程序的整体视觉风格,满足不同用户的需求。 C# Skin Engine 是一个专门用于C#...

    学做c#窗体皮肤

    总的来说,通过学习这个系列,你可以掌握如何在C#中创建自定义控件皮肤,提升你的应用程序界面设计能力。无论你是初学者还是有一定经验的开发者,都可以跟随教程一步步实践,最终实现自己独特的窗体皮肤。如果你有...

    qq2021皮肤透明教程 qq皮肤透明轻松搞定.docx

    QQ用户都知道,个性化一直是QQ软件的一大特色,QQ2021版也不例外,其界面皮肤的自定义选项给了广大用户广泛的自由度。在众多个性化选项中,QQ皮肤透明效果因其独特的视觉体验和个性化表现,成为了不少用户的追求目标...

    QQ2021透明皮肤教程.docx

    在QQ2021的皮肤设置界面,通常会有“更新皮肤”或“应用”按钮,点击它,系统会立即应用你所做的透明度调整。如果想要更换皮肤图片,可以在同一个界面中找到“自定义”选项,选择你之前准备好的图片,然后按照提示...

    SkinBuilder(皮肤文件大全ssk和库文件dll)——一句代码给vs.net软件换肤

    3、在你的软件设计界面添加“SkinEngine”控件 4、在Private Sub Form1_Load 下添加这句调用代码:SkinEngine1.SkinFile = "office2007.ssk" 5、成功使用,以后使用的话只需要做第3、4步就可以了,简单吧?! 注意...

    VS2005程序界面皮肤+使用教程

    你可以根据应用的风格和目标用户群体选择合适的皮肤。 总结来说,VS2005程序界面皮肤的使用可以极大地提升你的WinForm应用程序的视觉表现,通过遵循提供的教程,开发者能够轻松掌握这一技术,创造出独具特色的用户...

    英雄杀皮肤DIY教程.

    在开始之前,你需要确保已经安装了以下几款软件: 1. **格式工厂**:用于图片的格式转换。 2. **QQ影像**:用于图片的编辑处理。 此外,还需要满足以下前提条件: - 使用游戏的主程序安装皮肤基础包。 #### 三、...

    做窗体是用到的皮肤控件

    在Windows应用程序开发中,皮肤控件(Skin Control)是一种能够为用户...通过选择合适的皮肤控件库,开发者可以轻松地打造出引人入胜的应用界面,同时也要注意平衡性能和兼容性问题,确保软件在各种环境下的稳定运行。

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

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

    QQ空间中如何将个性皮肤做成一张全屏图?.docx

    以下是详细的步骤,教你如何将个性皮肤做成一张全屏图: 1. **开启自定义皮肤功能**: 首先,确保你的QQ黄钻等级达到了LV3或你是年费黄钻用户,因为这是自定义皮肤的前提条件。然后,登录你的QQ空间。 2. **进入...

    C# Form窗口皮肤文件

    在C#编程环境中,开发Windows桌面应用程序...无论是从视觉美观还是功能交互的角度,皮肤化都是提升软件质量的一个重要方面。正确地导入和应用皮肤文件,结合良好的设计原则,可以让C# Form窗口变得更加生动和引人注目。

    ps教程调色做图片

    Photoshop(简称PS)是一款由Adobe Systems开发的图像处理软件,以其强大的图像编辑和合成功能闻名于世。本文将从提供的教程片段中提取关键的调色技巧,帮助初学者掌握如何通过PS提升照片的视觉效果。 1. **基础...

    C++皮肤库,skin

    描述中的"很漂亮的界面,想做界面的同学可以试着学学"暗示了这个皮肤库提供了美观的界面设计,适合那些希望提升自己应用视觉效果的学习者或者开发者。它表明该库不仅美观,而且易于学习和使用,因为“用法很简单”,...

    Skinmagic漂亮皮肤

    1. **皮肤支持**:提供多种预设皮肤,用户可以选择自己喜欢的主题风格,如金属、木质、玻璃等,也可以自定义皮肤,以满足特定需求。 2. **控件皮肤化**:能够将常见的Windows控件,如按钮、编辑框、列表框、菜单等...

    ps来教你做艺术照.pdf

    以下是一些基本步骤和技巧,教你如何利用Photoshop调出柔和的蓝黄色调、漂亮的红黄色调以及怀旧风格的照片,同时还能进行人物细嫩肌肤的年轻化处理和制作魔幻海报。 1. **调出柔和的蓝黄色调** - 首先,复制背景...

    PhotoShop简单的人像皮肤修饰(磨皮)的两种方法新手教程.pdf

    PhotoShop 是一款功能强大的图像编辑软件,对于人像皮肤修饰(磨皮)有着非常重要的应用价值。今天,我们将详细介绍两种使用 PhotoShop 对人像皮肤进行修饰(磨皮)的方法。 方法一:使用修复画笔工具 1. 打开 ...

    多多colourful皮肤编辑工具v3.3.0.20绿色免费版

    对于那些想要更加个性化设置的用户,软件还提供了导入自定义图片的功能,用户可以将个人的照片、艺术作品等融入到皮肤设计中,真正实现了独一无二的输入法外观。 技术上的细节处理也是这款编辑工具的一大亮点。它很...

    ps美白教程分享,一步步去做就好

    这样做可以将之前的调整合并,便于后续操作。 5. **智能魔术棒工具**: 该工具用于快速选择相似颜色的区域,如人物的脖子和手部。选择后,可以通过通道面板存储选区,以便在其他调整层中应用。 6. **曲线调整层**...

Global site tag (gtag.js) - Google Analytics