728x90
반응형
|
한빛아카데미 IT COOKBOOK 276 Android Studio를 활용한 안드로이드 프로그래밍 5판 p.327
간단 일기장 앱 만들기
날짜를 선택했을 때 그 날짜의 일기가 없으면 새로 쓰고, 있으면 일기를 보여주는 앱을 만들자.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<DatePicker
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/datePicker1"
android:datePickerMode="spinner"
android:calendarViewShown="false" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edtDiary"
android:background="#00ff00"
android:lines="8" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnWrite"
android:enabled="false"
android:text="Button" />
</LinearLayout>
날짜를 선택할 수 있는 DatePicker와 일기장 내용을 작성할 EditText, 그리고 저장할 버튼을 하나 만들었습니다.
책의 보기처럼 DatePicker가 나오도록 spinner 속성도 추가했습니다.
그리고 버튼이 초기에 동작하지 않도록 enabled 속성을 false로 설정했습니다.
MainActivity.java
package com.cookandroid.project8_1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
DatePicker dp;
EditText edtDiary;
Button btnWrite;
String fileName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("간단 일기장");
dp = (DatePicker) findViewById(R.id.datePicker1);
edtDiary = (EditText) findViewById(R.id.edtDiary);
btnWrite = (Button) findViewById(R.id.btnWrite);
Calendar cal= Calendar.getInstance();
int cYear = cal.get(Calendar.YEAR);
int cMonth = cal.get(Calendar.MONTH);
int cDay = cal.get(Calendar.DAY_OF_MONTH);
dp.init(cYear, cMonth, cDay, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
fileName = Integer.toString(year) + "_" + Integer.toString(monthOfYear + 1) + "_" + Integer.toString(dayOfMonth) + ".txt";
String str = readDiary(fileName);
edtDiary.setText(str);
btnWrite.setEnabled(true);
}
});
btnWrite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
FileOutputStream outFs = openFileOutput(fileName, Context.MODE_PRIVATE);
String str = edtDiary.getText().toString();
outFs.write(str.getBytes());
outFs.close();
Toast.makeText(getApplicationContext(), fileName+" 이 저장됨", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
}
}
});
}
String readDiary (String fName){
String diaryStr = null;
FileInputStream inFs;
try {
inFs = openFileInput(fName);
byte[] txt = new byte[500];
inFs.read(txt);
inFs.close();
diaryStr = (new String(txt)).trim();
btnWrite.setText("수정하기");
} catch (IOException e) {
edtDiary.setHint("일기 없음");
btnWrite.setText("새로 저장");
}
return diaryStr;
}
}
일기 파일의 제목을 날짜로 저장하기 위해서 onDateChanged 안에 fileName을 지정해주었습니다.
그러고 나서 데이트피커를 init()으로 초기화했습니다.
readDiary() method는 해당 날짜의 파일을 읽어 일기의 내용을 반환하는 역할입니다.
btnWrite의 setOnClickListener로 일기를 저장하고 저장된 파일 이름을 토스트 메시지로 출력하게 됩니다.
Android Studio AVD 실행 결과
보시는 것처럼 이전에 저장한 일기가 있으면 수정하기 버튼으로 바뀌게 되고
저장한 내용이 없으면 저장하기 버튼으로 출력됩니다.
728x90
반응형
'Dev > 안드로이드' 카테고리의 다른 글
Do it! 안드로이드 앱 프로그래밍 토스트 메시지 위치 바꾸기 (1) | 2021.05.06 |
---|---|
Do it! 안드로이드 앱 프로그래밍 프레임 레이아웃과 뷰의 전환 (0) | 2021.04.25 |
안드로이드 프로그래밍 7장 직접 풀어보기 7-1 (2) | 2020.05.30 |
안드로이드 프로그래밍 7장 실습 7-1 (0) | 2020.05.29 |
안드로이드 프로그래밍 5장 직접 풀어보기 5-5 (2) | 2020.05.28 |