20172328 暑假做業 之 實現安卓小程序Enjoy-all
項目介紹
- 項目名稱:
- Enjoy - all
- 項目簡介:
- 本項目基於Java語言和Anroid Studio軟件,實現了簡單的冒泡、屏幕布局設計、多層次結構和一些實用功能。
- 使用說明:
- 使用本款app,可使用日記本功能、帳目計算功能以及打卡計劃提醒功能,能使用戶更好的管理時間。
需求分析
-
實現日帳管家功能:android
- 日帳管家是一個可以計算每日花銷並根據用戶設定的額度來反饋是否花銷合理的一個功能。
-
實現抒寫心情功能:git
- 抒寫心情板塊是實現了一個記事本的功能,主要能夠去記錄一些語句或者添加一些便籤。
-
實現生活計劃功能:數據庫
- 在生活計劃方面,作了一個鬧鐘的功能,可以對本身寫的打卡計劃進行提醒。
-
本身設計了該應用程序的圖標。
小程序
-
改了佈局文件中的一些屬性來保持界面乾淨美觀。app
相關過程及解釋
- 該款App一共包含7個活動。下面來依次介紹:
- <font size = 3>MainActivity</font>
該活動是本App進入後的第一個界面,界面主要是大體的介紹和一個跳轉按鈕。ide
- <font size = 3>SecondActivity</font>
該活動是承接MainActivity活動的第二個界面,這個界面上半部分是對該APP功能的一個簡單說明。下方是具體三個板塊——紅箋小字,抒寫心情▶、日帳管家▶、生活計劃▶。這三個板塊分別在該活動上體現爲一個按鈕,經過選擇能夠進入不一樣的功能界面。佈局
- <font size = 3>Second1Activity和AddNoteActivity</font>
- 這兩個活動構成了第一個板塊的功能,即抒寫心情功能。
- AddNoteActivity
public class AddNoteActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_note); } public void cancel(View view) { finish(); } public void addNote(View view) { String fileName = ((EditText) findViewById(R.id.noteTitle)) .getText().toString(); String body = ((EditText) findViewById(R.id.noteBody)) .getText().toString(); File parent = getFilesDir(); File file = new File(parent, fileName); PrintWriter writer = null; try { writer = new PrintWriter(file); writer.write(body); finish(); } catch (Exception e) { showAlertDialog("Error adding note", e.getMessage()); } finally { if (writer != null) { try { writer.close(); } catch (Exception e) { } } } } private void showAlertDialog(String title, String message) { AlertDialog alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setTitle(title); alertDialog.setMessage(message); alertDialog.show(); } }
- Second1Activity
public class Second1Activity extends Activity { private String selectedItem; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second1); ListView listView = (ListView) findViewById(R.id.listView1); listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); listView.setOnItemClickListener( new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { readNote(position); } }); } @Override public void onResume() { super.onResume(); refreshList(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_add: startActivity(new Intent(this, AddNoteActivity.class)); return true; case R.id.action_delete: deleteNote(); return true; default: return super.onOptionsItemSelected(item); } } private void refreshList() { ListView listView = (ListView) findViewById( R.id.listView1); String[] titles = fileList(); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, titles); listView.setAdapter(arrayAdapter); } private void readNote(int position) { String[] titles = fileList(); if (titles.length > position) { selectedItem = titles[position]; File dir = getFilesDir(); File file = new File(dir, selectedItem); FileReader fileReader = null; BufferedReader bufferedReader = null; try { fileReader = new FileReader(file); bufferedReader = new BufferedReader(fileReader); StringBuilder sb = new StringBuilder(); String line = bufferedReader.readLine(); while (line != null) { sb.append(line); line = bufferedReader.readLine(); } ((TextView) findViewById(R.id.textView1)). setText(sb.toString()); } catch (IOException e) { } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { } } if (fileReader != null) { try { fileReader.close(); } catch (IOException e) { } } } } } private void deleteNote() { if (selectedItem != null) { deleteFile(selectedItem); selectedItem = null; ((TextView) findViewById(R.id.textView1)).setText(""); refreshList(); } } }
Second1Activity活動使用一個ListView,它列出了系統中全部備忘的標題。Add啓動ADDNoteActivity活動,Delete刪除所選的備忘。
學習
- <font size = 3>Second2Activity</font>
- 該板塊實現了計算用戶每日花銷並根據用戶設定的額度來反饋是否花銷合理。在該板塊我學着去讀取用戶輸入的字符,而後將其轉化成字符串類型,再強制轉換成Double類型,再進行求和;而後用if語句作一個比較,彈出氣泡來反饋用戶。
value1 = Double.parseDouble(etvalue1.getText().toString()); value2 = Double.parseDouble(etvalue2.getText().toString()); value3 = Double.parseDouble(etvalue3.getText().toString()); value4 = Double.parseDouble(etvalue4.getText().toString()); value5 = Double.parseDouble(etvalue5.getText().toString()); value6 = Double.parseDouble(budget.getText().toString()); result = value1+ value2 + value3 + value4 + value5; textView.setText("" + result + ""); if(result > value6) { Toast.makeText(Second2Activity.this, "花銷已超出預算,請注意開支!(;′⌒`)", Toast.LENGTH_LONG).show(); } else { Toast.makeText(Second2Activity.this, "花銷合理有餘,請繼續保持哦。(* ̄︶ ̄)", Toast.LENGTH_LONG).show(); }
- <font size = 3>Second3Activity</font>
- 在這一板塊實現了鬧鐘的功能,可以對本身寫的打卡計劃進行提醒。
public class Second3Activity extends Activity { private EditText period; private int value; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second3); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected( MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public void setAlarm(View view) { period = (EditText)findViewById(R.id.editText16); value = Integer.parseInt(period.getText().toString()); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.HOUR, value); Date hoursLater = calendar.getTime(); Toast.makeText(this, "The alarm will set off at " + hoursLater, Toast.LENGTH_LONG).show(); AlarmManager alarmMgr = (AlarmManager) getSystemService( Context.ALARM_SERVICE); Intent intent = new Intent(this, WakeUpActivity.class); PendingIntent sender = PendingIntent.getActivity( this, 0, intent, 0); alarmMgr.set(AlarmManager.RTC_WAKEUP, hoursLater.getTime(), sender); } }
該類中的setAlarm方法建立了一個Date實例,指向從如今開始的某一段時間,而後建立了一個PendingIntent封裝了一個意圖,該意圖將會啓動WakeUpActivity活動。而後,它訪問了AlarmManager,而且經過傳遞時間和PendingIntent來設置了一個鬧鐘。
ui
製做感想
- 雖然仍是沒有好好利用暑假時間靜下心來作些東西,實際上展現出來的這個小型app很粗糙,但經過體驗過程,學到了很多東西。
- 在學習書上的一些內容的時候,本身也學着去作了一些改變和拓展,此次暑假的APP就到這裏結束了,還有有關數據庫的內容能夠在本學期的項目實踐中去接觸學習一下。
源碼地址分享
參考資料
- 《Java與Android開發學習指南》