오늘은 그리드 뷰에 대해서 알아보았습니다.
원래 간단한 예제를 찾아서 가져다 쓰려고 했는데, 적합한 예제도 없고,
해서, 그리드뷰를 이용해서 기본적인 달력을 만들어 보았습니다.
결과적으로 만들어질 달력의 모습은 아래와 같습니다.
순서는 아래의 다섯단계입니다.
1. GridView selector XML 작성
2. Activity Layout XML 작성
3. 날짜 하나(Cell)에 해당하는 XML 작성
4. Adapter 작성
5. Activity Code 구현
| 1. GridView selector XML 작성 |
저장위치 : res/drawable
파일이름 : grideview_selector.xml
이 selector xml 파일은 그리드뷰 자체에 기본적으로 있는 padding을 없애기 위해서 작성하는 것입니다.
| 2. Activity Layout XML 작성 |
저장위치 : res/layout
파일이름 : gv_calendar_activity.xml
달력을 만들것이기 때문에, 그리드뷰의 컬럼의 갯수를 7로 설정합니다.
| 3. 날짜 하나(Cell)에 해당하는 XML 작성 및 이미지 생성 |
XML 작성
저장위치 : res/layout
파일이름 : day.xml
그리드뷰도 기본적으로는 리스트뷰이기 때문에(리스트뷰를 상속받았기때문에),
리스트뷰를 커스텀하던 것 처럼, cell(리스트 뷰의 경우 row)에 해당하는 XML 파일을 작성해줍니다.
이미지 생성
저장위치 : res/drawable
파일이름 : bg_day.9.png
(나인패치를 사용한 이미지 파일)
| 4. Adapter 작성 |
저장위치 : me.croute.calendarexample/adapter
파일이름 : CalendarAdapter.java
BaseAdapter를 상속받아 구현한 Calendar Adapter입니다.
| 5. Activity Code 구현 |
저장위치 : me.croute.calendarexample/activity
파일이름 : GVCalendarActivity.java
이제는 액티비티를 구현해 줍니다.
기본적으로 버튼들과 그리드뷰, 텍스트뷰에 대해 reference를 해주고,
데이터를 구성한 후, setAdapter를 통해서 화면에 보여줍니다.
| 6. 추가적으로 필요한 데이터 |
저장위치 : me.croute.calendarexample/domain
파일이름 : DayInfo.java
이제 달력을 화면에 보여줄 수 있습니다.
월 이동도 가능하고, 조금만 코드를 수정한다면, 모든 기계에 보여질 수 있는 달력을 만들 수 있다라는 것입니다!!
각 요일에 대한 클릭이벤트는 Activity Java 코드에 있는 onItemClick 메소드를 구현하면 됩니다.
예제 소스코드
'Android > GridView 그리드뷰' 카테고리의 다른 글
| [Android] GridView Calendar - 그리드 뷰 캘린더 (달력 그리기 예제) (39) | 2011/03/08 |
|---|
TAG Android,
Android Calendar,
android calendar gridview,
Android GridView,
android gridview calendar,
Calendar,
Calendar GridView,
GridView,
GridView Calendar,
IT,
그리드 뷰,
그리드뷰 캘린더,
안드로이드,
안드로이드 그리드뷰,
안드로이드 캘린더,
캘린더,
캘린더 그리드뷰
GridViewCalendarExample.zip
댓글을 달아 주세요
^^ 2011/03/12 20:31 댓글주소 수정/삭제 댓글쓰기
그리드뷰 관련해서 검색하던 중에 보고 갑니다~~
좋은 정보 감사해요! 많은 도움이 될 것 같아요!!!
네. 도움이 되었다니 좋군요.
qredtr 2011/03/15 01:33 댓글주소 수정/삭제 댓글쓰기
좋은글 감사합니다.
저도 많은 도움이 될것 같네요~~!!ㅎ
복 받으세요~~ㅎ
이건 거의 기본적인 달력의 형태만을 구현한 것이구요,
이걸 응용해서 다른 멋진 달력을 만들수 있을 겁니다.
chrees 2011/04/22 18:35 댓글주소 수정/삭제 댓글쓰기
좋은 정보 정말 감사합니다! ^^
답변 달아주신 것도 감사하구요~
좋은 주말 되십시오. ^^
도움이 되었다니 좋군요.
하루남았지만, 좋은 주말되세요^^
thanks 2011/04/26 09:25 댓글주소 수정/삭제 댓글쓰기
정말 좋은 정보네요^^*
잘 보고 갑니다!!^^*
네 ^^ 열심히 하세요~
gogu 2011/04/29 10:58 댓글주소 수정/삭제 댓글쓰기
좋은 정보 감사합니다~~~
질문이 있는데요
약간 수정해서 안드로이드 1.5버전에서 쓸수있을까요?
가지고있는 모듈이 1.5버전만 지원해서요....ㅠ.ㅠ
네 이건 딱히 상위버전의 안드로이드 API를 사용한게 없기때문에 가능합니다.
이뮬레이터 하나 만들어서 확인해보셨으면 금방하셨을텐데요....
장미와나 2011/05/13 11:58 댓글주소 수정/삭제 댓글쓰기
감사합니다.
도움이 정말 많이 되고 있습니다.
복 받으실겁니다.^ ㅡ ^)!
방명록 남겨주셨던 분이네요.
저도 정말 복 받았으면 좋겠네요 ㅎㅎ
신정호 2011/05/13 16:17 댓글주소 수정/삭제 댓글쓰기
정말 짱입니다... 달력 관련 찾아보던중 정말 최고네요 이렇게 까지 올려주시다니 소스 분석해서 제걸로 만들어 보겠습니다. 저는 스크롤로 달력을 만들고 싶었거든요 암튼 달력 만드는데 아주 큰 도움이 되었습니다 감사합니다
별로 대단치도 않은 코드가지고 극찬을 해주시는군요.
열심히 하세요~ ^^
잘 보았습니다.^^ 그리드 뷰에 대해서 더 잘 이해할 수 있게되었습니다. 이제 그리드 뷰 녀석도 좀 더 요리할 수 있겠네요.. 감사합니다.
2011/06/21 17:28 댓글주소 수정/삭제 댓글쓰기
비밀댓글입니다
학생! 2011/06/24 06:26 댓글주소 수정/삭제 댓글쓰기
..어플 만드는데 소스를 참고해서 사용해도 될까요? 달력 소스가 너무 잘 정리되있어서 좋네여^_^
마음껏 사용하세요 ^^
>_< ! 정말 감사합니다.
우와앙 2011/07/10 16:50 댓글주소 수정/삭제 댓글쓰기
좋은 자료 감사합니다 :D
깔끔한 코드와 상세한 주석덕분에 이해가 잘가네요!
학생2 2011/07/11 11:59 댓글주소 수정/삭제 댓글쓰기
공부하는중에 정말 좋은 자료를 보고 갑니다!!
그런데 질문이 있습니다~!
각 날짜마다 이미지를 주신것 같은데
전체 에 하나의 이미지를 백그라운드로 주려면 어찌해야하나요?
그건 그리드뷰 자체에 하거나,
그리드뷰를 컨테인 하고 있는 부모 뷰에 하면 될듯 하네요 ^^
그리고 그리드뷰의 각 날짜에 있는 백그라운드를 아예 없애면(투명으로) 될거 같아요.
나그네 2011/07/14 18:21 댓글주소 수정/삭제 댓글쓰기
어플하나 구상중인데.. 님 소스 너무 맘에 드네요 ㅠㅠ
가져가 써두 될까요?
네 ㅋ
어차피 그냥은 못쓰고 참고자료로 쓸 정도 밖에 안되는 코드니까요 ㅋ
참고자료라도 되면 다행이죠 ㅋ
나그네 2011/07/15 10:55 댓글주소 수정/삭제 댓글쓰기
감사합니다.
참조자료라뇨~ 훌륭합니다. ^^
질문 있어요^^ 2011/08/02 21:50 댓글주소 수정/삭제 댓글쓰기
안녕하세요~ 우선 소스에 감사드립니다
제가 열심히 보고 있는데 다름이 아니라 제가 이 파일을 인텐트해서 메인해서
클릭해서 움직이게 만들어서
아무 날짜나 클릭하면 해당 날짜를 받아 와서 하는 건데요
position 값이 이번달로 고정이 되어서 클릭한 곳에 날짜가
어떻게 받아야 할지 모르겠네요....
년도나 달은
mThisMonthCalendar.get(Calendar.YEAR)
mThisMonthCalendar.get(Calendar.MONTH) + 1
이런식으로 받아 오면 제대로 받아오는 날짜는 position으로 받아오니
버튼을 클릭해서 달을 바꿔도 그게 position값은 안바뀌네요
소스에 주석이 없어서 공부하기가 너무 힘들어요 ㅠㅠ
답글 부탁드려도 될까요?
http://croute.me/446
참고하세요~ 아이템 클리에 대한 처리는
GridView 와 ListView 가 차이가 없습니다.
질문 있어요^^ 2011/08/03 00:06 댓글주소 수정/삭제 댓글쓰기
네 아이템 클릭에 대한 처리 보다는 위에 달력 소스에서 클릭한 부분에 날짜를 어떻게 받아오는지
그것이 잘 모르겠어요 말씀하신데요 클릭하면 이벤트 일어나는 부분은 알겠는데
클릭한 부분에서 날짜는 어떻게 가져 오죠??
날짜는 만들어 넣어야지요
Day 였나 DayInfo 였나요,
이런 Domain 클래스에
변수하나 만들어서
날짜를 넣어뒀다가
꺼내와야지요.
position에 맞는 데이터를요.
그래서 itemClick예제를 링크걸어드린겁니다.
클릭하는 곳에서 데이터 가져오는것은,
그냥 자바에서
getter setter 이용하는것과 다를바 없으니,
이런부분에서 부족하신것 같으시면,
Java에서 생성자와 getter/setter 등을 공부해보세요 ^^
질문 있어요^^ 2011/08/03 09:24 댓글주소 수정/삭제 댓글쓰기
아,, 날자 변수가 없군요.. 전 날짜 변수가 있는 줄 알았어요
아답터가 전혀 이해가 안되서 (파라미터로 보내는 것의 각 역할과 용도)
그 중에 날짜가 있는 줄알았는데(찍어보니 이미 줄 그어질때 position이 세팅 끝났더군요)
날짜 변수가 존재하지 않군요 한번 정리해 봐야 겠습니다
질문 있어요^^ 2011/08/03 09:56 댓글주소 수정/삭제 댓글쓰기
날짜 변수 하나 만들어서 날짜 세팅할때마다 날짜 값을 넣었더니 잘 되네요 ㅠㅠ
너무 감사합니다 덕분에 잘 해결하고 잘 보고 갑니다 datepicker 위젯을 쓸까도 생각했지만
님 소스가 너무 이쁘게 잘 되어있어서 포기를 못하고 뒤적 거리다가 원하는 부분은 가져가네요
아직도 아답터 부분은 너무 이해가 안되지만 ㅠㅠ(사용용도는 아는데 파라미터의 역할을
모르겠어요 ㅎㅎ)
변수 선언하라고 안가르쳐 주셨다면 아직도 아답터 붙잡고 날짜 찾고 있었겠네요 ㅎㅎ
어제 저녁에 고민하던거 오늘 아침에 상콤하게 해결하고 갑니다
달력만들기 잘 보고 갑니다!
저도 졸프용으로 간단한 어플 만드는데 참조해도 될런지요~ ㅎㅎ
좋은하루되세요~
네 ㅎ 연습용으로 만들어 본거니, 사용하셔도 됩니다.
장현우 2011/10/05 13:48 댓글주소 수정/삭제 댓글쓰기
안녕하세요...
올려주신 소스 덕분에 많은 도움이 되었습니다..ㅎㅎ
저 다름이아니라.. 하나 물어보고싶은게있는데..
이걸 물어봐도 될지모르겠네요 ㅠㅠ
해당날짜에 해당하는 일정을 불러오고
일정을 입력,수정을 하고싶은데 조언좀해주실수있을까요 ㅎㅎ
2달이나 더 지났지만. ^^;
당시 블로그를 자주 못들어왔었나보네요.
SQLite등을 이용해 테이블을 하나 만들어두고,
일정 데이터를 저장합니다.
컬럼은,
자동증가 인덱스, 날짜, 일정내용 등이겠죠.
달력에서 클릭이벤트가 발생했을 때,
날짜 값을 받아와서,
해당 날짜를 조건(where)로 테이블에서 꺼내오면 될 것 같습니다.
ch 2011/12/14 10:31 댓글주소 수정/삭제 댓글쓰기
감사합니다. 달력만들기관련해서. 알아보고 있었는데. 도움이 많이 될거 같습니다.
네 ^^ 수고하세요.
잘 봤습니다 ^^
감사합니다