如何更换皮肤

    技术2025-11-20  11

    要想做一个好的程序,皮肤也是很重要的额一部分,因为它是直接吸引用户的部分。像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,下载次数: 9主工程

      D_skin.rar  (54.5 KB)

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

    最新回复(0)