要想做一个好的程序,皮肤也是很重要的额一部分,因为它是直接吸引用户的部分。像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 编辑 ]
我们可以通过设置程序的主题和风格。但更换皮肤往往不止这些,它可能要更换更多的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,下载次数: 2
主工程

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