이번 시간에는 오늘 날짜 배경 색상을 변경해서 표시해주는 방법에 대하여 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.06.10 - [안드로이드] - [안드로이드 코틀린] 커스텀 달력 만드는 방법 part 5 인터페이스 없이 클릭 이벤트 만들기
- 설명 -
공통으로 사용하기 위해 구현
class CalendarUtil {
companion object{
var selectedDate: LocalDate = LocalDate.now()
}
}
- 설명 -
기존 selectedDate를 CalendarUtil의 selectedDate 사용
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)
//현재 날짜
CalendarUtil.selectedDate = LocalDate.now()
//화면 설정
setMonthView()
//이전달 버튼 이벤트
binding.preBtn.setOnClickListener {
//현재 월 -1 변수에 담기
CalendarUtil.selectedDate = CalendarUtil.selectedDate.minusMonths(1)
setMonthView()
}
//다음달 버튼 이벤트
binding.nextBtn.setOnClickListener {
CalendarUtil.selectedDate = CalendarUtil.selectedDate.plusMonths(1)
setMonthView()
}
}
//날짜 화면에 보여주기
private fun setMonthView() {
//년월 텍스트뷰 셋팅
binding.monthYearText.text = monthYearFromDate(CalendarUtil.selectedDate)
//날짜 생성해서 리스트에 담기
val dayList = dayInMonthArray(CalendarUtil.selectedDate)
//어댑터 초기화
val adapter = CalendarAdapter(dayList)
//레이아웃 설정(열 7개)
var manager: RecyclerView.LayoutManager = GridLayoutManager(applicationContext, 7)
//레이아웃 적용
binding.recyclerView.layoutManager = manager
//어뎁터 적용
binding.recyclerView.adapter = adapter
}
//날짜 타입 설정(월, 년)
private fun monthYearFromDate(date: LocalDate): String{
var formatter = DateTimeFormatter.ofPattern("MM월 yyyy")
// 받아온 날짜를 해당 포맷으로 변경
return date.format(formatter)
}
//날짜 생성
private fun dayInMonthArray(date: LocalDate): ArrayList<LocalDate?>{
var dayList = ArrayList<LocalDate?>()
var yearMonth = YearMonth.from(date)
//해당 월 마지막 날짜 가져오기(예: 28, 30, 31)
var lastDay = yearMonth.lengthOfMonth()
//해당 월의 첫 번째 날 가져오기(예: 4월 1일)
var firstDay = CalendarUtil.selectedDate.withDayOfMonth(1)
//첫 번째날 요일 가져오기(월:1, 일: 7)
var dayOfWeek = firstDay.dayOfWeek.value
for(i in 1..41){
if(i <= dayOfWeek || i > (lastDay + dayOfWeek)){
dayList.add(null)
}else{
//LocalDate.of(년, 월, 일)
dayList.add(LocalDate.of(CalendarUtil.selectedDate.year,
CalendarUtil.selectedDate.monthValue, i - dayOfWeek))
}
}
return dayList
}
}
- 설명 -
if(day == CalendarUtil.selectedDate)
MainActivity에서 받아온 날짜를 공통 selectedDate와
비교해서 현재 날짜에 배경색상을 변경합니다.
class CalendarAdapter(private val dayList: ArrayList<LocalDate?>):
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 day = dayList[holder.adapterPosition]
if(day == null){
holder.dayText.text = ""
}else{
//해당 일자를 넣는다.
holder.dayText.text = day.dayOfMonth.toString()
//현재 날짜 색상 칠하기
if(day == CalendarUtil.selectedDate){
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)
}
//날짜 클릭 이벤트
holder.itemView.setOnClickListener {
//인터페이스를 통해 날짜를 넘겨준다.
var iYear = day?.year
var iMonth = day?.monthValue
var iDay = day?.dayOfMonth
var yearMonDay = "$iYear 년 $iMonth 월 $iDay 일"
Toast.makeText(holder.itemView.context, yearMonDay, Toast.LENGTH_SHORT).show()
}
}
override fun getItemCount(): Int {
return dayList.size
}
}
2022.05.25 - [안드로이드] - [안드로이드 코틀린] 함수(function) 만드는 방법 part1 - 매개변수(parameter)
2022.05.27 - [안드로이드] - [안드로이드 코틀린] 함수(function) 만드는 방법 part3 - 단일 표현식
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part8 이번 달만 색상 진하게 변경하기 (2) | 2022.06.13 |
---|---|
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part7 달력 표시 변경하기 (0) | 2022.06.12 |
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part5 인터페이스 없이 클릭 이벤트 만들기 (0) | 2022.06.10 |
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part4 토요일 일요일 색상지정 및 날짜 클릭 이벤트 (0) | 2022.06.09 |
[안드로이드 코틀린] 커스텀 달력 만드는 방법 part3 날짜 구현 (0) | 2022.06.08 |
댓글 영역