android应用与系统的皮肤更换--1

昨天去听了CSDN举办的android开发讲座,其中讲到了应用皮肤与系统皮肤的更换方式,在这里总结下。

应用皮肤更换:

1.将皮肤资源内置到应用中。这种方式较为死板,即应用发布时就确定了有哪些皮肤可用。如果要发布新的皮肤,就要重新发布应用。另外,将所有皮肤放在应用中,会使应用安装包比较大。

2.通过下载的方式。即皮肤的资源文件并不是放在资源文件中,而是在用户选择了一种皮肤后,由程序下载该皮肤的资源文件。

这里资源文件又可以分为两种格式,一种是.apk型的资源文件。这种方式的原理是:如果不同android应用程序的android:sharedUserId属性相同,那么应用程序之间可以共享资源文件。举例如下:

建立两个工程:TestSkin1与TestSkin2。这里默认TestSkin1是主程序,TestSkin2是皮肤资源。TestSkin1里面有一个button,需要使用TestSkin2里面的资源作为背景。

TestSkin1的AndroidManifest.xml文件如下修改:

<?xml version="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
     package="com.mainskin"
     android:versionCode="1"
     android:versionName="1.0"
     android:sharedUserId="com.test.skin">
   <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".TestSkin1"
                 android:label="@string/app_name">
           <intent-filter>
                <actionandroid:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
       </activity>
 
   </application>
 
 
</manifest>

TestSkin2的AndroidManifest.xml文件如下修改:

<?xml version="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
     package="com.myskin"
     android:versionCode="1"
     android:versionName="1.0"
     android:sharedUserId="com.test.skin">
   <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".TestSkin2"
                 android:label="@string/app_name">
           <intent-filter>
                <actionandroid:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
       </activity>
 
   </application>
 
 
</manifest>
TestSkin1的Activity中对Button的声明:

ContextfriendContext=null;
                   try{
                            friendContext= this.createPackageContext("com.myskin",  Context.CONTEXT_IGNORE_SECURITY);
                   }catch (NameNotFoundException e) {
                            //TODO Auto-generated catch block
                            e.printStackTrace();
                   }
       Drawable aa=friendContext.getResources().getDrawable(R.drawable.icon);
       Button button=(Button)findViewById(R.id.button1);
       button.setBackgroundDrawable(aa);

在两个工程的drawable下放置两张名字同为icon的图片,但是图片的内容不同。

第二种应用换肤的方式是使用.zip文件保存资源文件。即软件在下载.zip包后,将其解压缩到某个位置,然后在程序中按照该位置访问资源。这种方式需要在程序中手动维护资源的路径,较为不方便。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值