From 761e02fd94616591dbb07cb6df8f03caf777f70b Mon Sep 17 00:00:00 2001 From: sanjeok77 Date: Thu, 12 Mar 2026 23:30:28 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=8B=AC=EB=A0=A5=20=EB=8F=99=EC=A0=81?= =?UTF-8?q?=20=EB=86=92=EC=9D=B4=20=EA=B3=84=EC=82=B0=20=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=20(1.3.0=20=EC=8A=A4=ED=83=80=EC=9D=BC=EB=A1=9C=20=EB=B3=B5?= =?UTF-8?q?=EC=9B=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - RecyclerView 높이 동적 계산 코드 제거 - CalendarAdapter rowCount 파라미터 제거 - 아이템 높이를 XML에서 고정하도록 변경 - 달력이 자연스럽게 화면에 채워지도록 개선 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- .../com/example/shiftalarm/CalendarAdapter.kt | 36 ++++++--------- .../com/example/shiftalarm/MainActivity.kt | 46 +++++-------------- 2 files changed, 25 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/com/example/shiftalarm/CalendarAdapter.kt b/app/src/main/java/com/example/shiftalarm/CalendarAdapter.kt index b2d25fe..9f1fad0 100644 --- a/app/src/main/java/com/example/shiftalarm/CalendarAdapter.kt +++ b/app/src/main/java/com/example/shiftalarm/CalendarAdapter.kt @@ -20,10 +20,9 @@ data class DayShift( ) class CalendarAdapter( - var days: List, - private val listener: OnDayClickListener, - var showHolidays: Boolean = true, - private val rowCount: Int = 6 // Default to 6 rows + var days: List, + private val listener: OnDayClickListener, + var showHolidays: Boolean = true ) : RecyclerView.Adapter() { interface OnDayClickListener { fun onDayClick(date: LocalDate, currentShift: String) @@ -48,28 +47,19 @@ class CalendarAdapter( return (dp * context.resources.displayMetrics.density).toInt() } - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val item = days[position] - val context = holder.itemView.context + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = days[position] + val context = holder.itemView.context - // Fixed item height - square cells based on screen width - val displayMetrics = context.resources.displayMetrics - val screenWidth = displayMetrics.widthPixels - val itemHeight = screenWidth / 7 + if (item.date == null) { + holder.itemView.visibility = View.INVISIBLE + return + } - val layoutParams = holder.itemView.layoutParams - layoutParams.height = itemHeight - holder.itemView.layoutParams = layoutParams + holder.itemView.visibility = View.VISIBLE - if (item.date == null) { - holder.itemView.visibility = View.INVISIBLE - return - } - - holder.itemView.visibility = View.VISIBLE - - // Day Number - + // Day Number + holder.dayNumber.text = item.date.dayOfMonth.toString() // Holiday / Weekend logic val isSunday = item.date.dayOfWeek == java.time.DayOfWeek.SUNDAY val isSaturday = item.date.dayOfWeek == java.time.DayOfWeek.SATURDAY diff --git a/app/src/main/java/com/example/shiftalarm/MainActivity.kt b/app/src/main/java/com/example/shiftalarm/MainActivity.kt index 808c734..2c48493 100644 --- a/app/src/main/java/com/example/shiftalarm/MainActivity.kt +++ b/app/src/main/java/com/example/shiftalarm/MainActivity.kt @@ -266,11 +266,10 @@ class MainActivity : AppCompatActivity() { return (dp * resources.displayMetrics.density).toInt() } - private fun setupCalendar() { - binding.calendarGrid.layoutManager = GridLayoutManager(this, 7) - binding.calendarGrid.setHasFixedSize(false) // Allow dynamic item sizing - updateCalendar() - } + private fun setupCalendar() { + binding.calendarGrid.layoutManager = GridLayoutManager(this, 7) + updateCalendar() + } private fun updateCalendar() { val prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) @@ -306,36 +305,15 @@ class MainActivity : AppCompatActivity() { dao.getMemosForMonth(monthStr).associateBy { memoItem -> memoItem.date } } - val days = generateDaysForMonthWithData(currentViewMonth, currentViewTeam, factory, overrides, memos) - - // Calculate row count (5 or 6 rows) - val daysInMonth = currentViewMonth.lengthOfMonth() - val firstDayOfMonth = currentViewMonth.atDay(1).dayOfWeek.value % 7 - val actualDayCount = firstDayOfMonth + daysInMonth - val rowCount = if (actualDayCount <= 35) 5 else 6 - - val adapter = CalendarAdapter(days, object : CalendarAdapter.OnDayClickListener { - override fun onDayClick(date: LocalDate, currentShift: String) { - showDaySettingsDialog(date, currentShift) - } - }, binding.cbShowHolidays.isChecked, rowCount) - - binding.calendarGrid.adapter = adapter - - // Set RecyclerView height based on row count - // 5 rows: fixed height to fill space, no scroll - // 6 rows: max height (5 rows worth), enable scroll - val displayMetrics = resources.displayMetrics - val screenWidth = displayMetrics.widthPixels - val cellHeight = screenWidth / 7 // Square cells - val recyclerViewHeight = cellHeight * rowCount - val layoutParams = binding.calendarGrid.layoutParams - layoutParams.height = recyclerViewHeight - binding.calendarGrid.layoutParams = layoutParams - - // Disable scroll for 5 rows, enable for 6 rows - binding.calendarGrid.isNestedScrollingEnabled = rowCount > 5 + val days = generateDaysForMonthWithData(currentViewMonth, currentViewTeam, factory, overrides, memos) + val adapter = CalendarAdapter(days, object : CalendarAdapter.OnDayClickListener { + override fun onDayClick(date: LocalDate, currentShift: String) { + showDaySettingsDialog(date, currentShift) + } + }, binding.cbShowHolidays.isChecked) + + binding.calendarGrid.adapter = adapter binding.monthTitle.text = currentViewMonth.format(DateTimeFormatter.ofPattern("yyyy년 MM월")) // Update Header Status Text with Permission Warning if needed