要想做一个好的程序,皮肤也是很重要的额一部分,因为它是直接吸引用户的部分。像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 编辑 ]
2010-06-14 15:11,下载次数: 9主工程
D_skin.rar (54.5 KB)2010-06-14 15:11,下载次数: 9皮肤工程
