diff --git a/CalrendarView/src/main/java/com/example/calrendarview/DayView.kt b/CalrendarView/src/main/java/com/example/calrendarview/DayView.kt index 3a1aa54..6fbaca6 100644 --- a/CalrendarView/src/main/java/com/example/calrendarview/DayView.kt +++ b/CalrendarView/src/main/java/com/example/calrendarview/DayView.kt @@ -72,7 +72,7 @@ class DayView : BaseCustomViews { } fun displayDayNumber() { - numOfDayView?.text = dayInfo?.getDayOfNum()?.toString() ?: "TEST" + numOfDayView?.text = dayInfo?.getNumOfDay()?.toString() ?: "TEST" Log.e(TAG, "numOfDayView?.text >>>> 4 ${numOfDayView?.text}") } diff --git a/CalrendarView/src/main/java/com/example/calrendarview/MonthView.kt b/CalrendarView/src/main/java/com/example/calrendarview/MonthView.kt index d09c900..4d08ce4 100644 --- a/CalrendarView/src/main/java/com/example/calrendarview/MonthView.kt +++ b/CalrendarView/src/main/java/com/example/calrendarview/MonthView.kt @@ -1,11 +1,18 @@ package com.example.calrendarview import android.content.Context +import android.content.res.TypedArray +import android.os.Build import android.util.AttributeSet +import android.util.Log +import android.view.LayoutInflater import android.view.View +import android.widget.TextView +import androidx.annotation.RequiresApi +import com.example.calrendarview.model.CalendarFactory import com.example.calrendarview.model.DayInfo - +@RequiresApi(Build.VERSION_CODES.O) class MonthView : BaseCustomViews { constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) @@ -23,8 +30,42 @@ class MonthView : BaseCustomViews { initChildViews() } - fun initChildViews() { + var dayInfo: DayInfo? = null + set(value) { + field = value + displayDayNumber() + } + + var numberOfday : Int = -1 + set(value) { + field = value + numOfDayView = findViewById(field) + } + + var numOfDayView : TextView? = null + + + override fun onTypedArray(context: Context, typedArray: TypedArray) { + super.onTypedArray(context, typedArray) + numberOfday = typedArray.getResourceId(R.styleable.BaseCustomViews_numOfDayId, R.id.day_num) + displayDayNumber() + } + + fun initChildViews(): Array { //todo : 7 * numberOfRow 의 차일드 뷰를 만든다. + val infos = CalendarFactory().getBeansOfThisWeek() + val childrens = Array(numberOfRow) { + val dayView = inflate(context, R.layout.item_day, this) as? DayView + dayView?.dayInfo = infos[it] + addView(dayView) + return@Array dayView + } + return childrens + } + + fun displayDayNumber() { + numOfDayView?.text = dayInfo?.getNumOfDay()?.toString() ?: "TEST" + Log.e(TAG, "numOfDayView?.text >>>> 4 ${numOfDayView?.text}") } fun displyMonthOfNumber() { diff --git a/CalrendarView/src/main/java/com/example/calrendarview/model/CalendarBean.kt b/CalrendarView/src/main/java/com/example/calrendarview/model/CalendarBean.kt new file mode 100644 index 0000000..3965a20 --- /dev/null +++ b/CalrendarView/src/main/java/com/example/calrendarview/model/CalendarBean.kt @@ -0,0 +1,39 @@ +package com.example.calrendarview.model + +import android.os.Build +import androidx.annotation.RequiresApi +import java.time.LocalDate + +@RequiresApi(Build.VERSION_CODES.O) +class CalendarBean: DayInfo { + constructor(date: LocalDate) { + this.day = date + } + constructor(y: Int, m: Int, d: Int) { + this.day = LocalDate.of(y, m , d) + } + + + private val today: LocalDate = LocalDate.now() + private val day: LocalDate + + + override fun getNumOfDay(): Int = this.day.dayOfMonth + + override fun getMonth(): Int = this.day.monthValue + + override fun getYear(): Int = this.day.year + + override fun getDayOfWeek(): String = this.day.dayOfWeek.toString() + + override fun isToday(): Boolean = day.isEqual(today) + + fun getNumOfToday(): Int = this.today.dayOfMonth + + fun getMonthOfToday(): Int = this.today.monthValue + + fun getYearOfToday(): Int = this.today.year + + fun getTodayOfWeek(): String = this.today.dayOfWeek.toString() + +} \ No newline at end of file diff --git a/CalrendarView/src/main/java/com/example/calrendarview/model/CalendarFactory.kt b/CalrendarView/src/main/java/com/example/calrendarview/model/CalendarFactory.kt new file mode 100644 index 0000000..fdf1a7f --- /dev/null +++ b/CalrendarView/src/main/java/com/example/calrendarview/model/CalendarFactory.kt @@ -0,0 +1,27 @@ +package com.example.calrendarview.model + +import android.os.Build +import androidx.annotation.RequiresApi +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.YearMonth +import java.time.temporal.TemporalAdjuster +import java.time.temporal.TemporalAdjusters +@RequiresApi(Build.VERSION_CODES.O) +class CalendarFactory { + fun getBeansOfWeek(date: LocalDate): Array { + val startDate = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)) + return Array(7) { + CalendarBean(startDate.plusDays(it.toLong())) + } + } + + fun getBeansOfThisWeek(): Array = getBeansOfWeek(LocalDate.now()) + + fun getBeansOfMonth(y: Int, m:Int): Array { + val daysInMonth = YearMonth.of(y, m).lengthOfMonth() + return Array(daysInMonth) { + CalendarBean(y, m, it + 1) + } + } +} \ No newline at end of file diff --git a/CalrendarView/src/main/java/com/example/calrendarview/model/DayInfo.kt b/CalrendarView/src/main/java/com/example/calrendarview/model/DayInfo.kt index 4d0acbd..bd837cf 100644 --- a/CalrendarView/src/main/java/com/example/calrendarview/model/DayInfo.kt +++ b/CalrendarView/src/main/java/com/example/calrendarview/model/DayInfo.kt @@ -2,7 +2,9 @@ package com.example.calrendarview.model interface DayInfo { - fun getDayOfNum() : Int - fun getDayOfWeek() : Int + fun getNumOfDay() : Int + fun getMonth(): Int + fun getYear(): Int + fun getDayOfWeek() : String fun isToday() : Boolean } \ No newline at end of file diff --git a/CalrendarView/src/main/res/values/attr.xml b/CalrendarView/src/main/res/values/attr.xml index 34c2e06..5e0da4e 100644 --- a/CalrendarView/src/main/res/values/attr.xml +++ b/CalrendarView/src/main/res/values/attr.xml @@ -10,11 +10,11 @@ - - + + - + \ No newline at end of file diff --git a/app/src/main/java/com/example/accountbook/calendar2/example/ActivityCalendarEx.kt b/app/src/main/java/com/example/accountbook/calendar2/example/ActivityCalendarEx.kt index 40bb59d..f9c8f31 100644 --- a/app/src/main/java/com/example/accountbook/calendar2/example/ActivityCalendarEx.kt +++ b/app/src/main/java/com/example/accountbook/calendar2/example/ActivityCalendarEx.kt @@ -3,35 +3,34 @@ package com.example.accountbook.calendar2.example import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.children import com.example.accountbook.R import com.example.accountbook.calendar2.CalendarLayoutListener import com.example.accountbook.calendar2.CalendarManager import com.example.accountbook.calendar2.CalendarPagerAdapter import com.example.accountbook.databinding.CalendarActivityExampleBinding +import com.example.accountbook.databinding.ExDayViewBinding +import com.example.calrendarview.DayView +import com.example.calrendarview.model.CalendarBean +import com.example.calrendarview.model.CalendarFactory +import com.example.calrendarview.model.DayInfo class ActivityCalendarEx: AppCompatActivity() { // member - private var bind: CalendarActivityExampleBinding? = null + lateinit var bind: CalendarActivityExampleBinding // AppCompatActivity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) bind = CalendarActivityExampleBinding.inflate(this.layoutInflater) - bind?.let { - setContentView(it.root) - it.calendarLayoutEx.listener = object: CalendarLayoutListener { - override fun onCreatedViewPager() { - it.calendarLayoutEx.viewPager?.adapter = CalendarPagerAdapter(this@ActivityCalendarEx).apply { - this.layoutId = R.layout.calendar_pager_example - } - } - } - it.root.setOnClickListener{ - - } - } +// for (i in 0 until 7) { + val infos = CalendarFactory().getBeansOfThisWeek() + bind.otherViews.numberOfRow = 7 +// (bind.otherViews.getChildAt(i) as? DayView)?.dayInfo = infos.get(i) +// } + setContentView(bind.root) } override fun onStart() { diff --git a/app/src/main/res/layout/calendar_activity_example.xml b/app/src/main/res/layout/calendar_activity_example.xml index 892ff18..db30e0d 100644 --- a/app/src/main/res/layout/calendar_activity_example.xml +++ b/app/src/main/res/layout/calendar_activity_example.xml @@ -3,62 +3,68 @@ android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> - - - + + + + + + + + - - - - - - + + + + + - - + - - - - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ex_day_view.xml b/app/src/main/res/layout/ex_day_view.xml new file mode 100644 index 0000000..0f8af6b --- /dev/null +++ b/app/src/main/res/layout/ex_day_view.xml @@ -0,0 +1,41 @@ + + + + + + \ No newline at end of file