이번 포스팅에선 자바를 사용해 달력을 띄우고, 일별로 일정을 저장할 수 있는 방법에 대해 포스팅하겠습니다.
코틀린으로 만드는 방법에 대해선 아래 포스팅을 참고해 주세요.
stickode.tistory.com/139
먼저 메인 화면을 만들어줍니다. 달력이 있고 일자를 클릭하면 밑에 내가 어떤 날짜를 선택했는지 텍스트뷰로 보여주며, 일정을 추가할 editText와 저장할 버튼을 만들겠습니다.
다음으로 메인 액티비티의 자바 파일을 작성하겠습니다.
import android.os.Bundle; import android.widget.Button; import android.widget.CalendarView; import android.widget.EditText; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { public String readDay = null; public String str = null; public CalendarView calendarView; public Button cha_Btn, del_Btn, save_Btn; public TextView diaryTextView, textView2, textView3; public EditText contextEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); calendarView = findViewById(R.id.calendarView); diaryTextView = findViewById(R.id.diaryTextView); save_Btn = findViewById(R.id.save_Btn); del_Btn = findViewById(R.id.del_Btn); cha_Btn = findViewById(R.id.cha_Btn); textView2 = findViewById(R.id.textView2); textView3 = findViewById(R.id.textView3); contextEditText = findViewById(R.id.contextEditText); } }화면의 기본 틀은 만들었으니 이제 하나씩 기능을 추가해 보겠습니다.
일자를 클릭하면 달력 밑에 editText가 나오게 한 다음, 그곳에 일정을 입력할 수 있고 저장 버튼을 누르면 해당 일자에 내가 입력한 일정이 저장되도록 하겠습니다.
일자를 클릭하는 것은 캘린더뷰를 클릭하는 것이기 때문에, 캘린더뷰에 아래 처리를 해주면 됩니다.
그리고 저장 버튼의 클릭 리스너를 아래와 같이 정의해줍니다.
save_Btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { saveDiary(readDay); str = contextEditText.getText().toString(); textView2.setText(str); save_Btn.setVisibility(View.INVISIBLE); cha_Btn.setVisibility(View.VISIBLE); del_Btn.setVisibility(View.VISIBLE); contextEditText.setVisibility(View.INVISIBLE); textView2.setVisibility(View.VISIBLE); } });다음으로 삭제 버튼의 리스너도 만들어줍니다.
@SuppressLint("WrongConstant") public void removeDiary(String readDay) { FileOutputStream fos; try { fos = openFileOutput(readDay, MODE_NO_LOCALIZED_COLLATORS); String content = ""; fos.write((content).getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } }최종 코드는 아래와 같습니다.
import android.annotation.SuppressLint; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CalendarView; import android.widget.EditText; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import java.io.FileInputStream; import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity { public String readDay = null; public String str = null; public CalendarView calendarView; public Button cha_Btn, del_Btn, save_Btn; public TextView diaryTextView, textView2, textView3; public EditText contextEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); calendarView = findViewById(R.id.calendarView); diaryTextView = findViewById(R.id.diaryTextView); save_Btn = findViewById(R.id.save_Btn); del_Btn = findViewById(R.id.del_Btn); cha_Btn = findViewById(R.id.cha_Btn); textView2 = findViewById(R.id.textView2); textView3 = findViewById(R.id.textView3); contextEditText = findViewById(R.id.contextEditText); calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() { @Override public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) { diaryTextView.setVisibility(View.VISIBLE); save_Btn.setVisibility(View.VISIBLE); contextEditText.setVisibility(View.VISIBLE); textView2.setVisibility(View.INVISIBLE); cha_Btn.setVisibility(View.INVISIBLE); del_Btn.setVisibility(View.INVISIBLE); diaryTextView.setText(String.format("%d / %d / %d", year, month + 1, dayOfMonth)); contextEditText.setText(""); checkDay(year, month, dayOfMonth); } }); save_Btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { saveDiary(readDay); str = contextEditText.getText().toString(); textView2.setText(str); save_Btn.setVisibility(View.INVISIBLE); cha_Btn.setVisibility(View.VISIBLE); del_Btn.setVisibility(View.VISIBLE); contextEditText.setVisibility(View.INVISIBLE); textView2.setVisibility(View.VISIBLE); } }); } public void checkDay(int cYear, int cMonth, int cDay) { readDay = "" + cYear + "-" + (cMonth + 1) + "" + "-" + cDay + ".txt"; FileInputStream fis; try { fis = openFileInput(readDay); byte[] fileData = new byte[fis.available()]; fis.read(fileData); fis.close(); str = new String(fileData); contextEditText.setVisibility(View.INVISIBLE); textView2.setVisibility(View.VISIBLE); textView2.setText(str); save_Btn.setVisibility(View.INVISIBLE); cha_Btn.setVisibility(View.VISIBLE); del_Btn.setVisibility(View.VISIBLE); cha_Btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { contextEditText.setVisibility(View.VISIBLE); textView2.setVisibility(View.INVISIBLE); contextEditText.setText(str); save_Btn.setVisibility(View.VISIBLE); cha_Btn.setVisibility(View.INVISIBLE); del_Btn.setVisibility(View.INVISIBLE); textView2.setText(contextEditText.getText()); } }); del_Btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { textView2.setVisibility(View.INVISIBLE); contextEditText.setText(""); contextEditText.setVisibility(View.VISIBLE); save_Btn.setVisibility(View.VISIBLE); cha_Btn.setVisibility(View.INVISIBLE); del_Btn.setVisibility(View.INVISIBLE); removeDiary(readDay); } }); if (textView2.getText() == null) { textView2.setVisibility(View.INVISIBLE); diaryTextView.setVisibility(View.VISIBLE); save_Btn.setVisibility(View.VISIBLE); cha_Btn.setVisibility(View.INVISIBLE); del_Btn.setVisibility(View.INVISIBLE); contextEditText.setVisibility(View.VISIBLE); } } catch (Exception e) { e.printStackTrace(); } } @SuppressLint("WrongConstant") public void removeDiary(String readDay) { FileOutputStream fos; try { fos = openFileOutput(readDay, MODE_NO_LOCALIZED_COLLATORS); String content = ""; fos.write((content).getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } @SuppressLint("WrongConstant") public void saveDiary(String readDay) { FileOutputStream fos; try { fos = openFileOutput(readDay, MODE_NO_LOCALIZED_COLLATORS); String content = contextEditText.getText().toString(); fos.write((content).getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } }앱을 빌드해서 확인하면 아래와 같이 작동하는 걸 볼 수 있습니다.
이 포스팅에 사용된 코드는 아래 링크에서 확인하실 수 있습니다.
stickode.com/detail.html?no=2169
스틱코드
stickode.com