이번 시간에는 이전달 날짜와 다음 달 날짜가 현재 달 날짜와 같이 보이기 때문에
현재 달 날짜를 분간하기 위해서 색상을 다르게 변경해보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.06.12 - [안드로이드] - [안드로이드 코틀린] 커스텀 달력 만드는 방법 part7 달력 표시 변경하기
- 설명 -
LocalDate -> Calendar 변경
class CalendarUtil {
companion object{
var selectedDate: Calendar = Calendar.getInstance()
}
}
- 설명 -
1.기존 Calendar 삭제
2.CalendarUtil.selectedDate.add(Calendar.MONTH, -1)
공통클래스에 있는 selectDate 사용합니다.
3.monthYearFromDate(calendar: Calendar)
함수 파라미터도 LocalDate -> Calendar로 변경되었습니다.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//binding 초기화
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
//화면 설정
setMonthView()
//이전달 버튼 이벤트
binding.preBtn.setOnClickListener {
//현재 월 -1 변수에 담기
CalendarUtil.selectedDate.add(Calendar.MONTH, -1)// 현재 달 -1
setMonthView()
}
//다음달 버튼 이벤트
binding.nextBtn.setOnClickListener {
CalendarUtil.selectedDate.add(Calendar.MONTH, 1) //현재 달 +1
setMonthView()
}
}
//날짜 화면에 보여주기
private fun setMonthView() {
//년월 텍스트뷰 셋팅
binding.monthYearText.text = monthYearFromDate(CalendarUtil.selectedDate)
//날짜 생성해서 리스트에 담기
val dayList = dayInMonthArray()
//어댑터 초기화
val adapter = CalendarAdapter(dayList)
//레이아웃 설정(열 7개)
var manager: RecyclerView.LayoutManager = GridLayoutManager(applicationContext, 7)
//레이아웃 적용
binding.recyclerView.layoutManager = manager
//어뎁터 적용
binding.recyclerView.adapter = adapter
}
//날짜 타입 설정(월, 년)
private fun monthYearFromDate(calendar: Calendar): String {
var year = calendar.get(Calendar.YEAR)
var month = calendar.get(Calendar.MONTH) + 1
return "$month 월 $year"
}
//날짜 생성
private fun dayInMonthArray(): ArrayList<Date>{
var dayList = ArrayList<Date>()
var monthCalendar = CalendarUtil.selectedDate.clone() as Calendar
//1일로 셋팅
monthCalendar[Calendar.DAY_OF_MONTH] = 1
//해당 달의 1일의 요일[1:일요일, 2: 월요일.... 7일: 토요일]
val firstDayOfMonth = monthCalendar[Calendar.DAY_OF_WEEK]-1
//요일 숫자만큼 이전 날짜로 설정
//예: 6월1일이 수요일이면 3만큼 이전날짜 셋팅
monthCalendar.add(Calendar.DAY_OF_MONTH, -firstDayOfMonth)
while(dayList.size < 42){
dayList.add(monthCalendar.time)
//1일씩 늘린다. 1일 -> 2일 -> 3일
monthCalendar.add(Calendar.DAY_OF_MONTH, 1)
}
return dayList
}
}
- 설명 -
1. if (iYear == selectYear && iMonth == selectMonth)
넘어온 날짜(년, 월)와 현재 날짜(년,월)를
비교해서 색상을 다르게 변경
2. if (selectDay == dayNo)
넘어온 날짜(dayNo)와 현재 날짜(selectDay)
같으면 배경 색상 변경
class CalendarAdapter(private val dayList: ArrayList<Date>) :
RecyclerView.Adapter<CalendarAdapter.ItemViewHolder>() {
class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val dayText: TextView = itemView.findViewById(R.id.dayText)
}
//화면 설정
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.calendar_item, parent, false)
return ItemViewHolder(view)
}
//데이터 설정
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
//날짜 변수에 담기
var monthDate = dayList[holder.adapterPosition]
//초기화
var dateCalendar = Calendar.getInstance()
//날짜 캘린더에 담기
dateCalendar.time = monthDate
//캘린더값 날짜 변수에 담기
var dayNo = dateCalendar.get(Calendar.DAY_OF_MONTH)
holder.dayText.text = dayNo.toString()
//넘어온 날짜
var iYear = dateCalendar.get(Calendar.YEAR) //년
var iMonth = dateCalendar.get(Calendar.MONTH) + 1 //월
var iDay = dateCalendar.get(Calendar.DAY_OF_MONTH)//일
//현재 날짜
var selectYear = CalendarUtil.selectedDate.get(Calendar.YEAR) //년
var selectMonth = CalendarUtil.selectedDate.get(Calendar.MONTH) + 1 //월
var selectDay = CalendarUtil.selectedDate.get(Calendar.DAY_OF_MONTH) //일
//넘어온 날짜와 현재 날짜 비교
if (iYear == selectYear && iMonth == selectMonth) { //같다면 진한 색상상
holder.dayText.setTextColor(Color.parseColor("#000000"))
//현재 날짜 비교해서 같다면 배경색상 변경
if (selectDay == dayNo) {
holder.itemView.setBackgroundColor(Color.LTGRAY)
}
//텍스트 색상 지정(토,일)
if ((position + 1) % 7 == 0) { //토요일은 파랑
holder.dayText.setTextColor(Color.BLUE)
} else if (position == 0 || position % 7 == 0) { //일요일은 빨강
holder.dayText.setTextColor(Color.RED)
}
} else { //다르다면 연한 색상
holder.dayText.setTextColor(Color.parseColor("#B4B4B4"))
//텍스트 색상 지정(토,일)
if ((position + 1) % 7 == 0) { //토요일은 파랑
holder.dayText.setTextColor(Color.parseColor("#B4FFFF"))
} else if (position == 0 || position % 7 == 0) { //일요일은 빨강
holder.dayText.setTextColor(Color.parseColor("#FFB4B4"))
}
}
//날짜 클릭 이벤트
holder.itemView.setOnClickListener {
var yearMonDay = "$iYear 년 $iMonth 월 $iDay 일"
Toast.makeText(holder.itemView.context, yearMonDay, Toast.LENGTH_SHORT).show()
}
}
override fun getItemCount(): Int {
return dayList.size
}
}
2022.05.19 - [안드로이드] - [안드로이드 코틀린] 변수 생성 및 변수 타입 만드는 방법
2022.05.20 - [안드로이드] - [안드로이드 코틀린] 배열 쉽게 만드는 방법
2022.05.21 - [안드로이드] - [안드로이드 코틀린] 반복문 For 만드는 다양한 방법
[안드로이드 코틀린] Tab Custom Animation part2 - 탭 기능 구현 (0) | 2022.06.15 |
---|---|
[안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정 (0) | 2022.06.14 |
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part7 달력 표시 변경하기 (0) | 2022.06.12 |
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part6 오늘 날짜 색상 변경하기 (0) | 2022.06.11 |
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part5 인터페이스 없이 클릭 이벤트 만들기 (0) | 2022.06.10 |
댓글 영역