-
Notifications
You must be signed in to change notification settings - Fork 2
날짜 선택 Bottom Sheet
Jo Hyun Jin edited this page Jan 15, 2021
·
2 revisions
-
NumberPicker 3개를 년, 월, 일로 지정하여 custom 해서 사용
-
기본 세팅
// 현재 날짜 가져오기 val currentDate = Calendar.getInstance() // minValue = 최소 날짜 표시 year.minValue = 2020 month.minValue = 1 date.minValue = 1 // maxValue = 최대 날짜 표시 year.maxValue = currentDate.get(Calendar.YEAR) // year에 따라 month maxValue 변경 if(diary_year == currentDate.get(Calendar.YEAR)) { month.maxValue = currentDate.get(Calendar.MONTH) + 1 } else { month.maxValue = 12 } // month에 따라 month, date maxValue 변경 if(diary_month == currentDate.get(Calendar.MONTH) + 1) { month.maxValue = currentDate.get(Calendar.MONTH) + 1 date.maxValue = currentDate.get(Calendar.DAY_OF_MONTH) } else { setMonthMax() } // 해당 다이어리의 날짜를 picker 가운데에 세팅 year.value = diary_year month.value = diary_month date.value = diary_date // 순환 안되게 막기 year.wrapSelectorWheel = false month.wrapSelectorWheel = false date.wrapSelectorWheel = false // edittext 입력 방지 year.descendantFocusability = NumberPicker.FOCUS_BLOCK_DESCENDANTS month.descendantFocusability = NumberPicker.FOCUS_BLOCK_DESCENDANTS date.descendantFocusability = NumberPicker.FOCUS_BLOCK_DESCENDANTS
-
picker value change listener
=> 년도가 올해이면, 월과 일의 maxValue가 '오늘'로 설정되어야함
=> 년도가 올해가 아니면, 월과 일의 maxValue가 12월 31일로 설정되어야함 -
스크롤했을 때 해당 날짜에 일기가 있는지 체크
=> 해당 날짜에 일기가 있으면 버튼 비활성화, 일기가 없으면 버튼 활성화// year picker change listener year.setOnValueChangedListener { _, _, _ -> if(year.value == currentDate.get(Calendar.YEAR)) { month.maxValue = currentDate.get(Calendar.MONTH) + 1 date.maxValue = currentDate.get(Calendar.DAY_OF_MONTH) } else { month.value = currentDate.get(Calendar.MONTH) + 1 date.value = currentDate.get(Calendar.DAY_OF_MONTH) month.maxValue = 12 setMonthMax() } } // month picker change listener month.setOnValueChangedListener { _, _, _ -> if(year.value == currentDate.get(Calendar.YEAR) && month.value == currentDate.get( Calendar.MONTH) + 1) { // 현재 년도에 현재 날짜일 때 month.maxValue = currentDate.get(Calendar.MONTH) + 1 date.maxValue = currentDate.get(Calendar.DAY_OF_MONTH) } else { month.maxValue = 12 setMonthMax() } } // 스크롤 했을 때 해당 날짜에 일기가 있는지 체크 year.setOnScrollListener(pickerScrollListener) month.setOnScrollListener(pickerScrollListener) date.setOnScrollListener(pickerScrollListener) Binding.btnDiaryDateEdit.setOnClickListener { val pick = intArrayOf(year.value, month.value, date.value) itemClick(pick) // 날짜수정 통신 requestEditDiary() } Binding.btnCloseDiaryEditDate.setOnClickListener { dialog?.dismiss() }