이번 시간에는 이전 포스팅에서 이전 달, 이번 달, 다음 달을
한 화면에 다 보여줬지만, 보여주고 나니 헷갈릴 수도 있어
이번 달만 배경 색상을 변경해서 표시하는 방법을 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.04.25 - [안드로이드] - [안드로이드] 커스텀 달력 만드는 방법 part7 달력 표시 변경하기
- 설명 -
LocalDate -> Calendar로 타입 변경
public class CalendarUtil {
public static Calendar selectedDate; //년월 변수
}
- 설명 -
기존 calendar -> 공통 변수로 변경
public class MainActivity extends AppCompatActivity{
TextView monthYearText; //년월 텍스트뷰
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//초기화
monthYearText = findViewById(R.id.monthYearText);
ImageButton preBtn = findViewById(R.id.pre_btn);
ImageButton nextBtn = findViewById(R.id.next_btn);
recyclerView = findViewById(R.id.recyclerView);
//현재 날짜
CalendarUtil.selectedDate = Calendar.getInstance();
//화면 설정
setMonthView();
//이전 달 버튼 이벤트
preBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//-1한 월을 넣어준다. (2월 -> 1월)
CalendarUtil.selectedDate.add(Calendar.MONTH, -1);// -1
setMonthView();
}
});
//다음 달 버튼 이벤트
nextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//+1한 월을 넣어준다.(2월 -> 3월)
CalendarUtil.selectedDate.add(Calendar.MONTH, 1); //+1
setMonthView();
}
});
}//onCreate
//날짜 타입 설정(4월 2020)
private String monthYearFromDate(Calendar calendar){
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
String monthYear = month + "월 " + year;
return monthYear;
}
//화면 설정
private void setMonthView(){
//년월 텍스트뷰 셋팅
monthYearText.setText(monthYearFromDate(CalendarUtil.selectedDate));
//해당 월 날짜 가져오기
ArrayList<Date> dayList = daysInMonthArray();
//어뎁터 데이터 적용
CalendarAdapter adapter = new CalendarAdapter(dayList);
//레이아웃 설정(열 7개)
RecyclerView.LayoutManager manager = new GridLayoutManager(getApplicationContext(), 7);
//레이아웃 적용
recyclerView.setLayoutManager(manager);
//어뎁터 적용
recyclerView.setAdapter(adapter);
}
//날짜 생성
private ArrayList<Date> daysInMonthArray(){
ArrayList<Date> dayList = new ArrayList<>();
//날짜 복사해서 변수 생성
Calendar monthCalendar = (Calendar) CalendarUtil.selectedDate.clone();
//1일로 셋팅 (4월 1일)
monthCalendar.set(Calendar.DAY_OF_MONTH, 1);
//요일 가져와서 -1 일요일:1, 월요일:2
int firstDayOfMonth = monthCalendar.get(Calendar.DAY_OF_WEEK) -1;
//날짜 셋팅 (-5일전)
monthCalendar.add(Calendar.DAY_OF_MONTH, -firstDayOfMonth);
//42전까지 반복
while(dayList.size() < 42){
//리스트에 날짜 등록
dayList.add(monthCalendar.getTime());
//1일씩 늘린 날짜로 변경 1일 -> 2일 -> 3일
monthCalendar.add(Calendar.DAY_OF_MONTH, 1);
}
return dayList;
}
}//MainActivity
- 설명 -
넘어온 calendar와 공통 calendar을 비교해서
같은 년, 월이면 진한 배경색으로 아니면 연한 배경색으로 변경
public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.CalendarViewHolder>{
ArrayList<Date> dayList;
public CalendarAdapter(ArrayList<Date> dayList) {
this.dayList = dayList;
}
@NonNull
@Override
public CalendarViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.calendar_cell, parent, false);
return new CalendarViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CalendarViewHolder holder, int position) {
//날짜 변수에 담기
Date monthDate = dayList.get(position);
//달력 초기화
Calendar dateCalendar = Calendar.getInstance();
dateCalendar.setTime(monthDate);
//현재 년 월
int currentDay = CalendarUtil.selectedDate.get(Calendar.DAY_OF_MONTH);
int currentMonth = CalendarUtil.selectedDate.get(Calendar.MONTH)+1;
int currentYear = CalendarUtil.selectedDate.get(Calendar.YEAR);
//넘어온 데이터
int displayDay = dateCalendar.get(Calendar.DAY_OF_MONTH);
int displayMonth = dateCalendar.get(Calendar.MONTH)+1;
int displayYear = dateCalendar.get(Calendar.YEAR);
//비교해서 년, 월 같으면 진한색 아니면 연한색으로 변경
if(displayMonth == currentMonth && displayYear == currentYear){
holder.parentView.setBackgroundColor(Color.parseColor("#D5D5D5"));
//날짜까지 맞으면 색상 표시
holder.itemView.setBackgroundColor(Color.parseColor("#CEFBC9"));
}else{
holder.parentView.setBackgroundColor(Color.parseColor("#F6F6F6"));
}
//날짜 변수에 담기
int dayNo = dateCalendar.get(Calendar.DAY_OF_MONTH);
holder.dayText.setText(String.valueOf(dayNo));
//텍스트 색상 지정
if( (position + 1) % 7 == 0){ //토요일 파랑
holder.dayText.setTextColor(Color.BLUE);
}else if( position == 0 || position % 7 == 0){ //일요일 빨강
holder.dayText.setTextColor(Color.RED);
}
//날짜 클릭 이벤트
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//클릭 시 기능 구현
}
});
}
@Override
public int getItemCount() {
return dayList.size();
}
class CalendarViewHolder extends RecyclerView.ViewHolder{
TextView dayText;
View parentView;
public CalendarViewHolder(@NonNull View itemView) {
super(itemView);
dayText = itemView.findViewById(R.id.dayText);
parentView = itemView.findViewById(R.id.parentView);
}
}
}
2022.04.08 - [안드로이드] - [안드로이드] Tab Custom Animation part1 - 화면 구성
2022.03.19 - [안드로이드] - [안드로이드] 간단한 할 일 목록(ToDoList) 쉽게 만드는 방법
2022.03.09 - [안드로이드] - [안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part1
[안드로이드] RecycelrView 안에(중첩) RecycelrView 만드는 방법 part2 (0) | 2022.04.28 |
---|---|
[안드로이드] RecycelrView 안에(중첩) RecycelrView 만드는 방법 part1 (0) | 2022.04.27 |
[안드로이드] 커스텀 달력 만드는 방법 part7 달력 표시 변경하기 (1) | 2022.04.25 |
[안드로이드] 커스텀 달력 만드는 방법 part6 오늘 날짜 색상 변경하기 (0) | 2022.04.24 |
[안드로이드] 커스텀 달력 만드는 방법 part5 인터페이스 없이 클릭 이벤트 만들기 (0) | 2022.04.23 |
댓글 영역