Android闹钟拓展版【安卓闹钟可换壁纸版】
经过写上篇文章Android闹钟最终版【android源码闹钟解析】 .发现有一些留邮箱的,但凡留邮箱的,我就发源码过去了,不错,基本上收到邮箱的都留言感谢了,这样我的成就感就多一点,也能有更多留邮箱的。学习是一个相互的过程,就像师说中“问道有先后,术业有专攻,仅此而已!”,知识就是一层窗户纸,捅破了就没什么了,-------->个人浅薄的拙见,在这表达一下!
前段时间参加一个CMDN的讲座,讲的是Android主题,其中就有小米手机的UI工程师,董红光简单介绍了5中换肤的方法。所以就想简单练手一下,拿上个闹钟来换个背景试一试。好多应用都有更换自己应用壁纸的功能,例如熊猫看书就有这个功能,还有韩国的SKY手机,也可以更换mainmeun的背景,我也小试牛刀一下;
转载请标明出处:http://blog.csdn.net/wdaming1986/article/details/7479359
在做这个更换背景的大致思路如下:
(1)用ImageSwitcher来切换图片,效果就和更换手机系统的壁纸类似,下面有个gallery,滚动gallery,当gallery,选中哪个的时候,就用ImageSwitcher来切换与之对应的大的图片。
(2)SetBackGround extends Activity implements AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory, OnClickListener。重写与之对应的方法。
(3)利用android提供的映射机制,当选中那个图片的时候,找到对应的gen下的R.java对应的16进制的值。
(4)用SharedPreferences保存这个id的值,下次进入这个程序,就可以取出来用了。就能永久保存了。
遇到的问题如下:
(1)在DeskClockMainActivity.java中用startActivityForResult(intent, request);这个方法来启动SetBackGround.java这个类,当点击设置后,finish()这个SetBackGround类,传递给DeskClockMainActivity的onActivityResult()方法一个int的值。问题:startActivityForResult启动的时候,当SetBackGround这个类finish()的时候,onActivityResult()方法接受到的intent为空,resultCode==cancel,我就查资料,原来是DeskClockMainActivity的launcherMode=“singleInstance”导致的,它会启动一个新的栈,导致返回的时候不在一个栈中,传递intent传递不过去,我猜测是不同栈,intent回传的时候android有问题。修改方法,launcherMode=“singleTask”就可以了。详细参见api的startActivityForResult()介绍;
(2)SetBackGround设置背景的类有个button,当声明一个button类型的时候,像常规那样写:
button = (Button) findViewById(R.id.setButton_bg);这时候报错,说类型不匹配。解决办法有两种:1、把button声明为view类的对象,这样再像常规那样找id就不报错了。2、让类实现一个OnClickListener监听,通过:findViewById(R.id.setButton_bg).setOnClickListener(this);这样写就ok了,实现onClick(View v) 的点击方法就ok了。
先看效果图,如下:
点击图中画红圈的图片,进入换背景界面; 点击menu--->点击---->设置背景,
进入到更换背景的界面: 点击设置背景,即背景设成功
下面把主要的类贴出来,供大家参考:
一、DeskClockMainActivity.java类中的代码,这个是程序的入口类:
package com.cn.daming.deskclock;import java.util.Calendar;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;import android.database.Cursor;import android.graphics.Typeface;import android.os.Bundle;import android.preference.PreferenceManager;import android.util.Log;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.AdapterContextMenuInfo;import android.widget.AdapterView.OnItemClickListener;import android.widget.CheckBox;import android.widget.CursorAdapter;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;public class DeskClockMainActivity extends Activity implements OnItemClickListener{ static final String PREFERENCES = "AlarmClock"; /** This must be false for production. If true, turns on logging, test code, etc. */ static final boolean DEBUG = false; private SharedPreferences mPrefs; private LayoutInflater mFactory; private ListView mAlarmsList; private Cursor mCursor; private LinearLayout mBglinearlayout; private static final int REQ_SET_BG = 100; private static final String SETBACKGROUND = "deskclock_bground"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //取自定义布局的LayoutInflater mFactory = LayoutInflater.from(this); //取getSharedPreferences的实例 mPrefs = getSharedPreferences(PREFERENCES, 0); //获取闹钟的cursor mCursor = Alarms.getAlarmsCursor(getContentResolver()); //更新布局界面 updateLayout(); } //加载更新界面布局 private void updateLayout() { setContentView(R.layout.alarm_clock); mBglinearlayout = (LinearLayout) findViewById(R.id.base_layout); mAlarmsList = (ListView) findViewById(R.id.alarms_list); AlarmTimeAdapter adapter = new AlarmTimeAdapter(this, mCursor); mAlarmsList.setAdapter(adapter); mAlarmsList.setVerticalScrollBarEnabled(true); mAlarmsList.setOnItemClickListener(this); mAlarmsList.setOnCreateContextMenuListener(this); View addAlarm = findViewById(R.id.add_alarm); addAlarm.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { addNewAlarm(); } }); // Make the entire view selected when focused. addAlarm.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { v.setSelected(hasFocus); } }); ImageButton deskClock = (ImageButton) findViewById(R.id.desk_clock_button); deskClock.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { /** * modify by wangxianming in 2012-4-17 * enter the set background class SetBackGround * author:wangxianming */ Intent intent = new Intent(); intent.setClass(DeskClockMainActivity.this, SetBackGround.class); startActivityForResult(intent, REQ_SET_BG); } }); } @Overrideprotected void onResume() { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); int setBgId = sharedPreferences.getInt(SETBACKGROUND, 0); Log.v("wangxianming", "DeskClockMainActivity onResume() setBgId == "+setBgId); if(setBgId != 0){ //设置背景 add by wangxianming in 2012-04-17 mBglinearlayout.setBackgroundResource(setBgId); }super.onResume();} private void addNewAlarm() { startActivity(new Intent(this, SetAlarm.class)); } /** * listview的适配器继承CursorAdapter * @author wangxianming * 也可以使用BaseAdapter */ private class AlarmTimeAdapter extends CursorAdapter { public AlarmTimeAdapter(Context context, Cursor cursor) { super(context, cursor); } public View newView(Context context, Cursor cursor, ViewGroup parent) { View ret = mFactory.inflate(R.layout.alarm_time, parent, false); DigitalClock digitalClock = (DigitalClock) ret.findViewById(R.id.digitalClock); digitalClock.setLive(false); return ret; } //把view绑定cursor的每一项 public void bindView(View view, Context context, Cursor cursor) { final Alarm alarm = new Alarm(cursor); View indicator = view.findViewById(R.id.indicator); // Set the initial resource for the bar image. final ImageView barOnOff = (ImageView) indicator.findViewById(R.id.bar_onoff); barOnOff.setImageResource(alarm.enabled ? R.drawable.ic_indicator_on : R.drawable.ic_indicator_off); // Set the initial state of the clock "checkbox" final CheckBox clockOnOff = (CheckBox) indicator.findViewById(R.id.clock_onoff); clockOnOff.setChecked(alarm.enabled); // Clicking outside the "checkbox" should also change the state. //对checkbox设置监听,使里外一致 indicator.setOnClickListener(new OnClickListener() { public void onClick(View v) { clockOnOff.toggle(); updateIndicatorAndAlarm(clockOnOff.isChecked(), barOnOff, alarm); } }); DigitalClock digitalClock = (DigitalClock) view.findViewById(R.id.digitalClock); // set the alarm text final Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, alarm.hour); c.set(Calendar.MINUTE, alarm.minutes); digitalClock.updateTime(c); digitalClock.setTypeface(Typeface.DEFAULT); // Set the repeat text or leave it blank if it does not repeat. TextView daysOfWeekView = (TextView) digitalClock.findViewById(R.id.daysOfWeek); final String daysOfWeekStr = alarm.daysOfWeek.toString(DeskClockMainActivity.this, false); if (daysOfWeekStr != null && daysOfWeekStr.length() != 0) { daysOfWeekView.setText(daysOfWeekStr); daysOfWeekView.setVisibility(View.VISIBLE); } else { daysOfWeekView.setVisibility(View.GONE); } // Display the label TextView labelView = (TextView) view.findViewById(R.id.label); if (alarm.label != null && alarm.label.length() != 0) { labelView.setText(alarm.label); labelView.setVisibility(View.VISIBLE); } else { labelView.setVisibility(View.GONE); } } }; //更新checkbox private void updateIndicatorAndAlarm(boolean enabled, ImageView bar, Alarm alarm) { bar.setImageResource(enabled ? R.drawable.ic_indicator_on : R.drawable.ic_indicator_off); Alarms.enableAlarm(this, alarm.id, enabled); if (enabled) { SetAlarm.popAlarmSetToast(this, alarm.hour, alarm.minutes, alarm.daysOfWeek); } } /* * (non-Javadoc) * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) * 创建上下文菜单 */ @Override public boolean onContextItemSelected(final MenuItem item) { final AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); final int id = (int) info.id; // Error check just in case. if (id == -1) { return super.onContextItemSelected(item); } switch (item.getItemId()) { case R.id.delete_alarm: // Confirm that the alarm will be deleted. new AlertDialog.Builder(this) .setTitle(getString(R.string.delete_alarm)) .setMessage(getString(R.string.delete_alarm_confirm)) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface d, int w) { Alarms.deleteAlarm(DeskClockMainActivity.this, id); } }) .setNegativeButton(android.R.string.cancel, null) .show(); return true; case R.id.enable_alarm: final Cursor c = (Cursor) mAlarmsList.getAdapter() .getItem(info.position); final Alarm alarm = new Alarm(c); Alarms.enableAlarm(this, alarm.id, !alarm.enabled); if (!alarm.enabled) { SetAlarm.popAlarmSetToast(this, alarm.hour, alarm.minutes, alarm.daysOfWeek); } return true; case R.id.edit_alarm: Intent intent = new Intent(this, SetAlarm.class); intent.putExtra(Alarms.ALARM_ID, id); startActivity(intent); return true; default: break; } return super.onContextItemSelected(item); } /* * (non-Javadoc) * @see android.app.Activity#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo) * 创建菜单 */ @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { // Inflate the menu from xml. getMenuInflater().inflate(R.menu.context_menu, menu); // Use the current item to create a custom view for the header. final AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; final Cursor c = (Cursor) mAlarmsList.getAdapter().getItem((int) info.position); final Alarm alarm = new Alarm(c); // Construct the Calendar to compute the time. final Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, alarm.hour); cal.set(Calendar.MINUTE, alarm.minutes); final String time = Alarms.formatTime(this, cal); // Inflate the custom view and set each TextView's text. final View v = mFactory.inflate(R.layout.context_menu_header, null); TextView textView = (TextView) v.findViewById(R.id.header_time); textView.setText(time); textView = (TextView) v.findViewById(R.id.header_label); textView.setText(alarm.label); // Set the custom view on the menu. menu.setHeaderView(v); // Change the text based on the state of the alarm. if (alarm.enabled) { menu.findItem(R.id.enable_alarm).setTitle(R.string.disable_alarm); } } /* * (non-Javadoc) * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem) * 设置菜单的点击事件的处理 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_item_settings: startActivity(new Intent(this, SettingsActivity.class)); return true; case R.id.menu_item_alarm_set_bg: /** * modify by wangxianming in 2012-4-17 * enter the set background class SetBackGround * author:wangxianming */ startActivityForResult((new Intent(this, SetBackGround.class)), REQ_SET_BG); return true; case R.id.menu_item_add_alarm: addNewAlarm(); return true; default: break; } return super.onOptionsItemSelected(item); } /* * (non-Javadoc) * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu) * 创建菜单 */ @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.alarm_list_menu, menu); return super.onCreateOptionsMenu(menu); } /* * (non-Javadoc) * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long) * 创建菜单的点击事件响应 */public void onItemClick(AdapterView<?> adapterView, View v, int pos, long id) {Intent intent = new Intent(this, SetAlarm.class); intent.putExtra(Alarms.ALARM_ID, (int) id); startActivity(intent);} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = sharedPreferences.edit(); if(resultCode != RESULT_OK) { return; } if(requestCode == REQ_SET_BG) { switch(resultCode) { case RESULT_OK: Bundle b = data.getExtras(); int id = b.getInt("getDrawable"); editor.putInt(SETBACKGROUND, id); editor.commit(); if(0 != id) { //设置背景 mBglinearlayout.setBackgroundResource(id); } Log.v("wangxianming", "DeskClockMainActivity onActivityResult()----> id == "+id); break; default: break; } }super.onActivityResult(requestCode, resultCode, data);} @Override protected void onDestroy() { super.onDestroy(); ToastMaster.cancelToast(); mCursor.close(); }}
二、SetBackGround.java类中的代码,这个是设置背景图片的类:
package com.cn.daming.deskclock;import java.util.Calendar;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;import android.database.Cursor;import android.graphics.Typeface;import android.os.Bundle;import android.preference.PreferenceManager;import android.util.Log;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.AdapterContextMenuInfo;import android.widget.AdapterView.OnItemClickListener;import android.widget.CheckBox;import android.widget.CursorAdapter;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;public class DeskClockMainActivity extends Activity implements OnItemClickListener{ static final String PREFERENCES = "AlarmClock"; /** This must be false for production. If true, turns on logging, test code, etc. */ static final boolean DEBUG = false; private SharedPreferences mPrefs; private LayoutInflater mFactory; private ListView mAlarmsList; private Cursor mCursor; private LinearLayout mBglinearlayout; private static final int REQ_SET_BG = 100; private static final String SETBACKGROUND = "deskclock_bground"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //取自定义布局的LayoutInflater mFactory = LayoutInflater.from(this); //取getSharedPreferences的实例 mPrefs = getSharedPreferences(PREFERENCES, 0); //获取闹钟的cursor mCursor = Alarms.getAlarmsCursor(getContentResolver()); //更新布局界面 updateLayout(); } //加载更新界面布局 private void updateLayout() { setContentView(R.layout.alarm_clock); mBglinearlayout = (LinearLayout) findViewById(R.id.base_layout); mAlarmsList = (ListView) findViewById(R.id.alarms_list); AlarmTimeAdapter adapter = new AlarmTimeAdapter(this, mCursor); mAlarmsList.setAdapter(adapter); mAlarmsList.setVerticalScrollBarEnabled(true); mAlarmsList.setOnItemClickListener(this); mAlarmsList.setOnCreateContextMenuListener(this); View addAlarm = findViewById(R.id.add_alarm); addAlarm.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { addNewAlarm(); } }); // Make the entire view selected when focused. addAlarm.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { v.setSelected(hasFocus); } }); ImageButton deskClock = (ImageButton) findViewById(R.id.desk_clock_button); deskClock.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { /** * modify by wangxianming in 2012-4-17 * enter the set background class SetBackGround * author:wangxianming */ Intent intent = new Intent(); intent.setClass(DeskClockMainActivity.this, SetBackGround.class); startActivityForResult(intent, REQ_SET_BG); } }); } @Overrideprotected void onResume() { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); int setBgId = sharedPreferences.getInt(SETBACKGROUND, 0); Log.v("wangxianming", "DeskClockMainActivity onResume() setBgId == "+setBgId); if(setBgId != 0){ //设置背景 add by wangxianming in 2012-04-17 mBglinearlayout.setBackgroundResource(setBgId); }super.onResume();} private void addNewAlarm() { startActivity(new Intent(this, SetAlarm.class)); } /** * listview的适配器继承CursorAdapter * @author wangxianming * 也可以使用BaseAdapter */ private class AlarmTimeAdapter extends CursorAdapter { public AlarmTimeAdapter(Context context, Cursor cursor) { super(context, cursor); } public View newView(Context context, Cursor cursor, ViewGroup parent) { View ret = mFactory.inflate(R.layout.alarm_time, parent, false); DigitalClock digitalClock = (DigitalClock) ret.findViewById(R.id.digitalClock); digitalClock.setLive(false); return ret; } //把view绑定cursor的每一项 public void bindView(View view, Context context, Cursor cursor) { final Alarm alarm = new Alarm(cursor); View indicator = view.findViewById(R.id.indicator); // Set the initial resource for the bar image. final ImageView barOnOff = (ImageView) indicator.findViewById(R.id.bar_onoff); barOnOff.setImageResource(alarm.enabled ? R.drawable.ic_indicator_on : R.drawable.ic_indicator_off); // Set the initial state of the clock "checkbox" final CheckBox clockOnOff = (CheckBox) indicator.findViewById(R.id.clock_onoff); clockOnOff.setChecked(alarm.enabled); // Clicking outside the "checkbox" should also change the state. //对checkbox设置监听,使里外一致 indicator.setOnClickListener(new OnClickListener() { public void onClick(View v) { clockOnOff.toggle(); updateIndicatorAndAlarm(clockOnOff.isChecked(), barOnOff, alarm); } }); DigitalClock digitalClock = (DigitalClock) view.findViewById(R.id.digitalClock); // set the alarm text final Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, alarm.hour); c.set(Calendar.MINUTE, alarm.minutes); digitalClock.updateTime(c); digitalClock.setTypeface(Typeface.DEFAULT); // Set the repeat text or leave it blank if it does not repeat. TextView daysOfWeekView = (TextView) digitalClock.findViewById(R.id.daysOfWeek); final String daysOfWeekStr = alarm.daysOfWeek.toString(DeskClockMainActivity.this, false); if (daysOfWeekStr != null && daysOfWeekStr.length() != 0) { daysOfWeekView.setText(daysOfWeekStr); daysOfWeekView.setVisibility(View.VISIBLE); } else { daysOfWeekView.setVisibility(View.GONE); } // Display the label TextView labelView = (TextView) view.findViewById(R.id.label); if (alarm.label != null && alarm.label.length() != 0) { labelView.setText(alarm.label); labelView.setVisibility(View.VISIBLE); } else { labelView.setVisibility(View.GONE); } } }; //更新checkbox private void updateIndicatorAndAlarm(boolean enabled, ImageView bar, Alarm alarm) { bar.setImageResource(enabled ? R.drawable.ic_indicator_on : R.drawable.ic_indicator_off); Alarms.enableAlarm(this, alarm.id, enabled); if (enabled) { SetAlarm.popAlarmSetToast(this, alarm.hour, alarm.minutes, alarm.daysOfWeek); } } /* * (non-Javadoc) * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) * 创建上下文菜单 */ @Override public boolean onContextItemSelected(final MenuItem item) { final AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); final int id = (int) info.id; // Error check just in case. if (id == -1) { return super.onContextItemSelected(item); } switch (item.getItemId()) { case R.id.delete_alarm: // Confirm that the alarm will be deleted. new AlertDialog.Builder(this) .setTitle(getString(R.string.delete_alarm)) .setMessage(getString(R.string.delete_alarm_confirm)) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface d, int w) { Alarms.deleteAlarm(DeskClockMainActivity.this, id); } }) .setNegativeButton(android.R.string.cancel, null) .show(); return true; case R.id.enable_alarm: final Cursor c = (Cursor) mAlarmsList.getAdapter() .getItem(info.position); final Alarm alarm = new Alarm(c); Alarms.enableAlarm(this, alarm.id, !alarm.enabled); if (!alarm.enabled) { SetAlarm.popAlarmSetToast(this, alarm.hour, alarm.minutes, alarm.daysOfWeek); } return true; case R.id.edit_alarm: Intent intent = new Intent(this, SetAlarm.class); intent.putExtra(Alarms.ALARM_ID, id); startActivity(intent); return true; default: break; } return super.onContextItemSelected(item); } /* * (non-Javadoc) * @see android.app.Activity#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo) * 创建菜单 */ @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { // Inflate the menu from xml. getMenuInflater().inflate(R.menu.context_menu, menu); // Use the current item to create a custom view for the header. final AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; final Cursor c = (Cursor) mAlarmsList.getAdapter().getItem((int) info.position); final Alarm alarm = new Alarm(c); // Construct the Calendar to compute the time. final Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, alarm.hour); cal.set(Calendar.MINUTE, alarm.minutes); final String time = Alarms.formatTime(this, cal); // Inflate the custom view and set each TextView's text. final View v = mFactory.inflate(R.layout.context_menu_header, null); TextView textView = (TextView) v.findViewById(R.id.header_time); textView.setText(time); textView = (TextView) v.findViewById(R.id.header_label); textView.setText(alarm.label); // Set the custom view on the menu. menu.setHeaderView(v); // Change the text based on the state of the alarm. if (alarm.enabled) { menu.findItem(R.id.enable_alarm).setTitle(R.string.disable_alarm); } } /* * (non-Javadoc) * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem) * 设置菜单的点击事件的处理 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_item_settings: startActivity(new Intent(this, SettingsActivity.class)); return true; case R.id.menu_item_alarm_set_bg: /** * modify by wangxianming in 2012-4-17 * enter the set background class SetBackGround * author:wangxianming */ startActivityForResult((new Intent(this, SetBackGround.class)), REQ_SET_BG); return true; case R.id.menu_item_add_alarm: addNewAlarm(); return true; default: break; } return super.onOptionsItemSelected(item); } /* * (non-Javadoc) * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu) * 创建菜单 */ @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.alarm_list_menu, menu); return super.onCreateOptionsMenu(menu); } /* * (non-Javadoc) * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long) * 创建菜单的点击事件响应 */public void onItemClick(AdapterView<?> adapterView, View v, int pos, long id) {Intent intent = new Intent(this, SetAlarm.class); intent.putExtra(Alarms.ALARM_ID, (int) id); startActivity(intent);} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = sharedPreferences.edit(); if(resultCode != RESULT_OK) { return; } if(requestCode == REQ_SET_BG) { switch(resultCode) { case RESULT_OK: Bundle b = data.getExtras(); int id = b.getInt("getDrawable"); editor.putInt(SETBACKGROUND, id); editor.commit(); if(0 != id) { //设置背景 mBglinearlayout.setBackgroundResource(id); } Log.v("wangxianming", "DeskClockMainActivity onActivityResult()----> id == "+id); break; default: break; } }super.onActivityResult(requestCode, resultCode, data);} @Override protected void onDestroy() { super.onDestroy(); ToastMaster.cancelToast(); mCursor.close(); }}
【说明】有Android闹钟最终版【android源码闹钟解析】代码的,可以参照我的代码修改一下;
当然如果没有代码的:
(一)想要源码的可以留下邮箱,我看到后就给你发过去!
(二)也可以到我的csdn资源中下载:http://download.csdn.net/detail/wdaming1986/4240708
更多相关文章
- Android样式的开发:selector篇
- 摄像头Camera视频源数据采集解析
- 【iOS-cocos2d-X 游戏开发之十六】配置你的Cocos2dx项目编译后的
- 实现类似Android的网格效果的列表视图
- 翻译:Tutorial1:透明面板(LinearLayout)定义
- [置顶] Android(安卓)通知栏Notification的整合 全面学习 (一个DE
- 如何跳过Nexus 7二代的开机设置
- Android底部菜单(Fragment控制切换多个页面)
- Android--设置软键盘的显示和隐藏