如何更换皮肤

要想做一个好的程序,皮肤也是很重要的额一部分,因为它是直接吸引用户的部分。像QQ,MSN,搜狗输入法等成功软件都有大量的皮肤供用户选择。 
我们可以通过设置程序的主题和风格。但更换皮肤往往不止这些,它可能要更换更多的resources资源。这个程序只是说明更换皮肤的方法,代码很简单。包括两个工程,一个主工程,一个皮肤工程,负责更换皮肤。 
代码介绍如下: 
1.主程序: 
package com.D_skinMain; 

import android.app.Activity; 
import android.content.Context; 
import android.content.pm.PackageManager.NameNotFoundException; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class D_skinMain extends Activity { 
        /** Called when the activity is first created. */ 
        private LinearLayout showBg; 
        private Context friendContext = null; 
        private int flag = 0; 
        private TextView info; 
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
                super.onCreate(savedInstanceState); 
                setContentView(R.layout.main); 
                
                info = (TextView) findViewById(R.id.info); 
                info.setText("skin1"); 
                showBg = (LinearLayout) findViewById(R.id.showbg); 
                showBg.setBackgroundResource(R.drawable.background); 

                try { 
                        friendContext = this.createPackageContext( 
                                        "com.D_skin", 
                                        Context.CONTEXT_IGNORE_SECURITY); 
                } catch (NameNotFoundException e) { 
                        e.printStackTrace(); 
                } 

                Button btn = (Button) findViewById(R.id.btn); 
                btn.setOnClickListener(new OnClickListener(){ 

                        @Override 
                        public void onClick(View v) { 
                                if(flag == 0){ 
                                showBg.setBackgroundDrawable(friendContext.getResources().getDrawable(R.drawable.background)); 
                                flag = 1; 
                                info.setText("skin2"); 
                                }else if (flag == 1) { 
                                        showBg.setBackgroundResource(R.drawable.background); 
                                        flag = 0; 
                                        info.setText("skin1"); 
                                } 
                                
                        } 
                        
                }); 
        } 



2 皮肤程序: 
package com.D_skin; 

import android.app.Activity; 
import android.os.Bundle; 

public class D_skin extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
    } 

嘿嘿,简单吧! 

3.manifest.xml文件 
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.D_skin" 
      android:versionCode="1" 
      android:versionName="1.0" 
      android:sharedUserId="com.D_skinMain.skin"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
        <activity android:name=".D_skin" 
                  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> 
    <uses-sdk android:minSdkVersion="3" /> 

</manifest> 

4. 程序说明: 
>要看这个程序的效果,必须装皮肤程序,否则点击换肤按钮后程序会爆掉,这个我没有修改,便于查看皮肤工程的作用。 
>程序为通过按钮改变imageview的背景图片。图片名称为background.png 。其为2张图片,分别位于这两个工程中,点击主程序的换肤按钮,就加载skin工程中的背景图片资源进行更换,当然要真的做换肤的例子肯定不止这些资源,这里意在说明原理。 
>程序的关键在于menifest中的 <android:sharedUserId="com.D_skinMain.skin">,SharedUserid 
拥有同一个User id的多个APK可以配置成运行在同一个进程中,所以默认就是可以互相访问任意数据。也可以配置成运行成不同的进程,同时可以访问其他APK的数据目录下的数据库和文件,就像访问本程序的数据一样。 
> 代码中的关键部分在于:friendContext = this.createPackageContext( 
                                        "com.D_skin", 
                                        Context.CONTEXT_IGNORE_SECURITY); 

showBg.setBackgroundDrawable(friendContext.getResources().getDrawable(R.drawable.background)); 

>附上这两个工程的打包文件,以便有兴趣的查看。:loveliness:
[  本帖最后由 allen_fang 于 2010-06-14  15:13 编辑 ]

附件

  D_skinMain.rar  (203.83 KB)

2010-06-14 15:11,下载次数: 2
主工程

  D_skin.rar  (54.5 KB)

2010-06-14 15:11,下载次数: 3
皮肤工程

你可能感兴趣的:(android,Security,application,button,resources,encoding)