實現了一個計時器APP,程序界面簡潔,只有一個時間顯示區域和兩個圖片按鈕,一個按鈕是開始/暫停,另外一個按鈕是中止。ide
兩個按鈕,左邊的是開始計時,計時過程當中點擊爲暫停計時功能右邊的按鈕爲中止計時功能。.net
菜單功能有兩個,3d
設置計時器單位有兩種可選,1秒和0.1秒code
時間展現orm
if (1000 == mlTimerUnit) { // 秒 settingTimerUnitFlg = SETTING_SECOND_ID; tvTime.setText(R.string.init_time_second); } else if (100 == mlTimerUnit) { // 0.1秒 settingTimerUnitFlg = SETTING_100MILLISECOND_ID; tvTime.setText(R.string.init_time_100millisecond); }
// 設置時間展現 int min = (totalSec / 60); int sec = (totalSec % 60); try{ if (SETTING_SECOND_ID == settingTimerUnitFlg) { // 秒 tvTime.setText(String.format("%1$02d:%2$02d", min, sec)); } else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) { // 0.1秒 tvTime.setText(String.format("%1$02d:%2$02d:%3$d", min, sec, yushu)); } } catch(Exception e) { tvTime.setText("" + min + ":" + sec + ":" + yushu); e.printStackTrace(); } break;
其中變量具體含義爲
圖變量定義blog
開始暫停按鈕圖片
View.OnClickListener startPauseListener = new View.OnClickListener() { @Override public void onClick(View v) { if (null == timer) { if (null == task) { task = new TimerTask() { @Override public void run() { if (null == msg) { msg = new Message(); } else { msg = Message.obtain(); } msg.what = 1; handler.sendMessage(msg); } }; } timer = new Timer(true); timer.schedule(task, mlTimerUnit, mlTimerUnit); } // 開始 if (!bIsRunningFlg) { bIsRunningFlg = true; } else { // 暫停 try{ bIsRunningFlg = false; task.cancel(); task = null; timer.cancel(); // 取消計時 timer.purge(); timer = null; handler.removeMessages(msg.what); } catch(Exception e) { e.printStackTrace(); } } } };
中止計時按鈕rem
// 中止 View.OnClickListener stopListener = new View.OnClickListener() { @Override public void onClick(View v) { if (null != timer) { task.cancel(); task = null; timer.cancel(); // 取消計時 timer.purge(); timer = null; handler.removeMessages(msg.what); } mlCount = 0; bIsRunningFlg = false; if (SETTING_SECOND_ID == settingTimerUnitFlg) { // 秒 tvTime.setText(R.string.init_time_second); } else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) { // 100 毫秒 tvTime.setText(R.string.init_time_100millisecond); } } };
設置菜單get
public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu);
設置子菜單虛擬機
// 設置子菜單的名稱 SubMenu settingMenu = menu.addSubMenu(0, SETTING_TIMER_UNIT_ID, 0, R.string.menu_setting_timer_unit).setIcon(R.drawable.setting); // 按對應的名稱增長子菜單 settingMenu.add(1, SETTING_SECOND_ID, 0, R.string.menu_setting_second); settingMenu.add(1, SETTING_100MILLISECOND_ID, 1, R.string.menu_setting_100milisec); // 退出 menu.add(0, EXIT_ID, 2, R.string.menu_exit).setIcon(R.drawable.exit);
選擇菜單
public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case SETTING_TIMER_UNIT_ID: break; case EXIT_ID: finish(); // 退出應用 break; case SETTING_SECOND_ID: // 秒 if (SETTING_SECOND_ID != settingTimerUnitFlg) { mlTimerUnit = 1000; settingTimerUnitFlg = SETTING_SECOND_ID; } tvTime.setText(R.string.init_time_second); break; case SETTING_100MILLISECOND_ID: // 100毫秒 if (SETTING_100MILLISECOND_ID != settingTimerUnitFlg) { mlTimerUnit = 100; settingTimerUnitFlg = SETTING_100MILLISECOND_ID; } tvTime.setText(R.string.init_time_100millisecond); break; default: break; }
遇到的問題
菜單項如今顯示不出來,本來最初仍是右上角有三個點的菜單項,可是奇妙的是過了一段時間後運行發現那個菜單項不顯示了,開始覺得是代碼出錯了,檢查以後發現沒有問題,以爲多是系統不顯示了,網上有不少解決這個問題的辦法,但嘗試屢次後都沒有用,而後又嘗試了使用不一樣的方法建立菜單,結果都不顯示,後來看到這篇文章安卓模擬器的菜單鍵找不到在什麼位置,以爲我可能跟這個同樣吧,後來又查找到在虛擬機上運行時,按快捷鍵Ctrl+M能夠顯示菜單,嘗試以後個人菜單項終於出來了!雖然仍是不能直接顯示。
這個APP的功能不多,待改進的地方不少,應該說從一開始就沒想着作一個很複雜的APP,對本身的要求過低了。可是從這個過程當中仍是學到了一些技巧,但願之後能繼續加油,爭取作處更好的。