当前位置:  编程技术>移动开发
本页文章导读:
    ▪教你如何做可以换皮肤的软件        教你怎么做可以换皮肤的软件 网上找了很久,未果。偶然的机会,看到aiMinesweeper.HelloSkin的AndroidManifest.xml里有那么一个属性:android:sharedUserId="com.artfulbits.aiminesweeper"顿时感到看到了阳光,.........
    ▪ android移动开发案例源代码打包上载        android移动开发案例源代码打包下载 android移动开发案例源代码打包下载   ......
    ▪ 怎么实现一个网站的客户端程序,和手机版的校内通相类似       如何实现一个网站的客户端程序,和手机版的校内通相类似 大家好,有谁做过一个网站的客户端程序,类似校内网站的校内通一样,就是能装在手机上,时刻能看到一个网站的及时信息,.........

[1]教你如何做可以换皮肤的软件
    来源: 互联网  发布时间: 2014-02-18
教你怎么做可以换皮肤的软件
网上找了很久,未果。
偶然的机会,看到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,终于成功了。

测试代码(主工程和皮肤工程)已上传,没写注释望见谅。
1 楼 cqllang 2011-03-07  
感觉是sharedUserId共享两个程序之间资源的吧?

跟换皮肤好像关系不大?
2 楼 dai_lm 2011-03-23  
恩,对的,的确是共享2个工程之间的资源
这样就可以创建一个只有默认皮肤的工程,一个单独的皮肤工程,调用皮肤工程的资源就可以改变Activity画面的主题,布局等。
如果想做多套皮肤,只要创建相应多的皮肤工程,然后安装就可以了。

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

当然这个只是自己的研究调查,如果有不对的地方,还请指教
3 楼 live17909 2011-04-07  
能出源码吗
4 楼 live17909 2011-04-11  
主工程报图片资源找不到呢。是不是还漏了哪里
5 楼 dai_lm 2011-04-12  
代码已上传,有需要的朋友可以下载
(水平有限,勿喷)
6 楼 live17909 2011-04-18  
同一个工程里就包含了多套皮肤,那么切换就更简单?怎么切换呢,代码可以控制drawable不同文件夹的显示吗?drawable文件夹的图片不是系统自适应显示的吗
7 楼 dai_lm 2011-04-18  
live17909 写道
同一个工程里就包含了多套皮肤,那么切换就更简单?怎么切换呢,代码可以控制drawable不同文件夹的显示吗?drawable文件夹的图片不是系统自适应显示的吗


/guide/topics/resources/drawable-resource.html#LevelList
我想你可以参考这个,通过设定不同的level值,就可以调用不同的drawable,可能这个可以满足你的要求
8 楼 clm86 2011-08-11  
你好,我想问一下,你还有没有研究换肤的。我看了一下你这个,这样换肤是不是要在手机上再装上新皮肤的应用。要是要换到默认的皮肤不就控制不了。。。
9 楼 dai_lm 2011-08-12  
clm86 写道
你好,我想问一下,你还有没有研究换肤的。我看了一下你这个,这样换肤是不是要在手机上再装上新皮肤的应用。要是要换到默认的皮肤不就控制不了。。。

这个逻辑就看各人怎么控制了,一般的做法是把皮肤的package存到数据库,然后切换。
10 楼 clm86 2011-08-14  
dai_lm 写道
clm86 写道
你好,我想问一下,你还有没有研究换肤的。我看了一下你这个,这样换肤是不是要在手机上再装上新皮肤的应用。要是要换到默认的皮肤不就控制不了。。。

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

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

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

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

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

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

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

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

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

希望对你有所帮助

好的,谢谢了。我试试去

    
[2] android移动开发案例源代码打包上载
    来源: 互联网  发布时间: 2014-02-18
android移动开发案例源代码打包下载

android移动开发案例源代码打包下载

 


    
[3] 怎么实现一个网站的客户端程序,和手机版的校内通相类似
    来源: 互联网  发布时间: 2014-02-18
如何实现一个网站的客户端程序,和手机版的校内通相类似
大家好,有谁做过一个网站的客户端程序,类似校内网站的校内通一样,就是能装在手机上,时刻能看到一个网站的及时信息,但是我不知道怎么样在android下访问远程服务器和数据库,谁有这方面的经验,能否介绍一下,我看到javaEye网站推出了一个客户端,但是没有看懂,还有一点,服务器端需要怎么配置?谢谢

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3