最近工作要實現換壁紙小功能,將代碼做成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() {@Overridepublic 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();}}
然後上效果
:http://download.csdn.net/detail/ethan_xue/4413167