반응형

일정을 저장하기 위한 스케줄러 느낌의 캘린더 만들기 위해 캘린더에 대해 찾아봤었다.

안드로이드에서 CalendarView라는 캘린더를 제공하긴 하지만 내가 생각하는 기능들을 넣기에는 한계가 있다고 느꼈다.

나중에라도 다른 기능을 더 추가하기 위해서는 캘린더를 커스텀해서 만들어야겠다는 생각을 하게 되었고, 커스텀 캘린더를 만들기로 했다.

1. Calendar

Home화면에서 Drawer를 통해 달력을 들어가면 아래와 같은 화면이 나온다.

캡쳐를 한 시점인 7월 1일을 기준으로 현재 일은 초록색, 평일은 검은색, 토요일은 파란색, 일요일은 빨간색으로 표기했다.

WGout_Calendar

캘린더는 리사이클러뷰로 만들었다.

캘린더를 구성하는 코드는 아래와 같다.

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,0false0);
        }
        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, false0);
            }
 
            //날짜에 따른 일정 표시
        }
    }
cs

먼저 리사이클러뷰를 StaggredGridLayoutManager를 이용해서 한 행을 7칸으로 나눈다.( -> 일 월 화 수 목 금 토 )

그다음 현재 날짜를 받아와서 날짜를 표시하는 day.xml 공백을 표시하는 empty.xml을 이용해서 달력을 구성한다.

달력의 이전 버튼을 누르면 아래 화면처럼 이전 달의 정보를 얻을 수 있고,

WGout_Calendar_previous

다음 버튼을 누르면 다음 달의 정보를 알 수 있다.

WGout_Calendar_next

달력에서 임의의 날짜 하나를 선택하여 클릭하면 아래와 같은 화면이 나온다.

WGout_Calendar_select

현재는 일정을 추가하지 않아서 "일정이 없습니다."가 적힌 TextView가 표시된다.

오른쪽 상단에 표시된 추가 버튼을 누르면 일정을 추가할 수 있다.

버튼을 누르면 아래와 같은 화면이 나온다.

WGout_Calendar_add

지도는 Naver에서 제공하는 API를 사용했는데 API에 대해 정리한 게시글은 아래 링크에 있다.

 

[안드로이드 스튜디오 독학#42] NaverMapAPI

이번 글은 네이버 맵 API를 사용하면서 내가 사용한 API들에 대해 정리해보려 한다. 안드로이드에서는 맵을 사용할때 주로 네이버, 카카오, 구글 맵을 사용하는데 나는 내가 평소에 자주 사용했던

seminzzang.tistory.com

초기화면은 GpsGetter를 이용해 현재의 위경도를 받아와 지도에 표시한다.

아래 사진처럼 맵에서 원하는 위치를 클릭하고 일정을 등록한 다음에 저장버튼을 누르면,

WGout_Calendar_add2

아래처럼 일정이 추가되고, 

WGout_Calendar_schedule

일정을 다시 클릭하면 일정에 대한 정보가 나오고 삭제를 할 수 있다.

WGout_Calendar_show

그리고 달력에서도 일정을 확인할 수 있다.

WGout_Calendar_added

반응형

+ Recent posts