最近工作要實現換壁紙小功能,將代碼做成demo發出來
沒有采用zip格式換膚,因爲只是更換一張圖片背景
1.將三張圖放入drawable-hdpi,我放的是480*800的
2.用sharedPreference存取皮膚的id,以便於下次啓動的時候根據id來選擇用哪個皮膚,在onresume()裏刷新皮膚
3.存到sharedPreference的數據採用string,不能採用圖片的id,因爲圖片的id是每次程序啓動後又會重新生成的
不多說了直接上,代碼
public class ChangeSkinActivity extends Activity {
private static final String SKIN_ID = "skin_id";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
Button btnChangeSkin = (Button) findViewById(R.id.btnChangeSkin);
btnChangeSkin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if ("bg0".equals(getSkinResourceName())) {
setSkinResourceName("bg1");
}else if ("bg1".equals(getSkinResourceName())) {
setSkinResourceName("bg2");
}else if ("bg2".equals(getSkinResourceName())) {
setSkinResourceName("bg0");
}
refreshSkin();
}
});
}
@Override
protected void onResume() {
super.onResume();
refreshSkin();
}
/**
* 更換皮膚
* 1.點擊更換皮膚快捷菜單後
* 2.程序運行起來後
*/
private void refreshSkin() {
int skinId = getSkinResourceId();
findViewById(R.id.layout).setBackgroundResource(skinId);
}
private int getSkinResourceId(){
int skinId = R.drawable.bg0;
String skinName=getSkinResourceName();
if(skinName.equals("bg1")){
skinId = R.drawable.bg1;
} else if(skinName.equals("bg2")){
skinId = R.drawable.bg2;
}
return skinId;
}
private String getSkinResourceName() {
try {
SharedPreferences preferences = getSharedPreferences("skinxml", Context.MODE_PRIVATE);
return preferences.getString(SKIN_ID, "bg0");
} catch (Exception e) {
e.printStackTrace();
return "bg0";
}
}
private void setSkinResourceName(String skinName) {
SharedPreferences preferences = getSharedPreferences("skinxml", Context.MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putString(SKIN_ID, skinName);
editor.commit();
}
}
然後上效果