일정을 저장하기 위한 스케줄러 느낌의 캘린더 만들기 위해 캘린더에 대해 찾아봤었다.
안드로이드에서 CalendarView라는 캘린더를 제공하긴 하지만 내가 생각하는 기능들을 넣기에는 한계가 있다고 느꼈다.
나중에라도 다른 기능을 더 추가하기 위해서는 캘린더를 커스텀해서 만들어야겠다는 생각을 하게 되었고, 커스텀 캘린더를 만들기로 했다.
1. Calendar
Home화면에서 Drawer를 통해 달력을 들어가면 아래와 같은 화면이 나온다.
캡쳐를 한 시점인 7월 1일을 기준으로 현재 일은 초록색, 평일은 검은색, 토요일은 파란색, 일요일은 빨간색으로 표기했다.
캘린더는 리사이클러뷰로 만들었다.
캘린더를 구성하는 코드는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
private void setCalender(int year, int month){
adapter_calendar = new CalendarRecyclerAdapter(year, month);
rv_calendar.setLayoutManager(new StaggeredGridLayoutManager(7,StaggeredGridLayoutManager.VERTICAL));
rv_calendar.setAdapter(adapter_calendar);
GregorianCalendar calendar = new GregorianCalendar(year, month, 1);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) -1 ;
int max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
String str = "";
tv_calendar_date.setText(Integer.toString(calendar.get(Calendar.YEAR)) + "/" + Integer.toString(calendar.get(Calendar.MONTH)+1));
for(int i = 0; i < dayOfWeek; i++){
adapter_calendar.addItem(CALENDAR_EMPTY,0, false, 0);
}
for(int i = 1; i <= max; i++){
mdate = Integer.toString((year * 10000) + ((month+1) * 100) + i);
Cursor cursor_calendar_schedule = null;
cursor_calendar_schedule = sqliteDB.rawQuery("SELECT * FROM SCHEDULE WHERE DATE = '" + mdate + "'", null);
str += Integer.toString(cursor_calendar_schedule.getCount()) + " ";
if(cursor_calendar_schedule.getCount() != 0) {
adapter_calendar.addItem(CALENDAR_DAY, i, true, cursor_calendar_schedule.getCount());
}
else {
adapter_calendar.addItem(CALENDAR_DAY, i, false, 0);
}
//날짜에 따른 일정 표시
}
}
|
cs |
먼저 리사이클러뷰를 StaggredGridLayoutManager를 이용해서 한 행을 7칸으로 나눈다.( -> 일 월 화 수 목 금 토 )
그다음 현재 날짜를 받아와서 날짜를 표시하는 day.xml 공백을 표시하는 empty.xml을 이용해서 달력을 구성한다.
달력의 이전 버튼을 누르면 아래 화면처럼 이전 달의 정보를 얻을 수 있고,
다음 버튼을 누르면 다음 달의 정보를 알 수 있다.
달력에서 임의의 날짜 하나를 선택하여 클릭하면 아래와 같은 화면이 나온다.
현재는 일정을 추가하지 않아서 "일정이 없습니다."가 적힌 TextView가 표시된다.
오른쪽 상단에 표시된 추가 버튼을 누르면 일정을 추가할 수 있다.
버튼을 누르면 아래와 같은 화면이 나온다.
지도는 Naver에서 제공하는 API를 사용했는데 API에 대해 정리한 게시글은 아래 링크에 있다.
초기화면은 GpsGetter를 이용해 현재의 위경도를 받아와 지도에 표시한다.
아래 사진처럼 맵에서 원하는 위치를 클릭하고 일정을 등록한 다음에 저장버튼을 누르면,
아래처럼 일정이 추가되고,
일정을 다시 클릭하면 일정에 대한 정보가 나오고 삭제를 할 수 있다.
그리고 달력에서도 일정을 확인할 수 있다.
'Legacy' 카테고리의 다른 글
[안드로이드 스튜디오 독학#41] WGout_날씨(Weather) (0) | 2021.07.05 |
---|---|
[안드로이드 스튜디오 독학#40] WGout_네비게이션(Navigation) (0) | 2021.07.05 |
[안드로이드 스튜디오 독학#38] WGout_메인화면(Main) (0) | 2021.07.05 |
[안드로이드 스튜디오 독학#37] WGout (0) | 2021.07.04 |
[안드로이드 스튜디오 독학#36] 현재 날씨 어플3 (0) | 2021.06.22 |