Merge pull request #1451 from KryptKode/fix/monthly-view-grid-size
fix incorrect month view wrapper clickable background height
This commit is contained in:
commit
ce4d094e3b
|
@ -10,7 +10,7 @@ import com.simplemobiletools.calendar.pro.helpers.COLUMN_COUNT
|
||||||
import com.simplemobiletools.calendar.pro.helpers.ROW_COUNT
|
import com.simplemobiletools.calendar.pro.helpers.ROW_COUNT
|
||||||
import com.simplemobiletools.calendar.pro.models.DayMonthly
|
import com.simplemobiletools.calendar.pro.models.DayMonthly
|
||||||
import com.simplemobiletools.commons.extensions.onGlobalLayout
|
import com.simplemobiletools.commons.extensions.onGlobalLayout
|
||||||
import kotlinx.android.synthetic.main.month_view.view.*
|
import kotlinx.android.synthetic.main.month_view.view.month_view
|
||||||
|
|
||||||
// used in the Monthly view fragment, 1 view per screen
|
// used in the Monthly view fragment, 1 view per screen
|
||||||
class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : FrameLayout(context, attrs, defStyle) {
|
class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : FrameLayout(context, attrs, defStyle) {
|
||||||
|
@ -44,6 +44,43 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
||||||
|
super.onLayout(changed, left, top, right, bottom)
|
||||||
|
measureSizes()
|
||||||
|
var y = 0
|
||||||
|
var x = 0
|
||||||
|
var curLeft = dayWidth.toInt()
|
||||||
|
val end = right + paddingRight
|
||||||
|
|
||||||
|
for (i in 0 until childCount) {
|
||||||
|
val child = getChildAt(i)
|
||||||
|
if (child is MonthView) {
|
||||||
|
//ignore the MonthView layout
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
child.measure(MeasureSpec.makeMeasureSpec(dayWidth.toInt(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dayHeight.toInt(), MeasureSpec.EXACTLY))
|
||||||
|
|
||||||
|
val childLeft = x * dayWidth + horizontalOffset - child.translationX
|
||||||
|
val childTop = y * dayHeight + weekDaysLetterHeight - child.translationY
|
||||||
|
val childWidth = child.measuredWidth
|
||||||
|
val childHeight = child.measuredHeight
|
||||||
|
val childRight = childLeft + childWidth
|
||||||
|
val childBottom = childTop + childHeight
|
||||||
|
|
||||||
|
child.layout(childLeft.toInt(), childTop.toInt(), childRight.toInt(), childBottom.toInt())
|
||||||
|
|
||||||
|
if (curLeft + childWidth < end) {
|
||||||
|
curLeft += childWidth
|
||||||
|
x++
|
||||||
|
} else {
|
||||||
|
y++
|
||||||
|
x = 0
|
||||||
|
curLeft = childWidth
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun updateDays(newDays: ArrayList<DayMonthly>, addEvents: Boolean, callback: ((DayMonthly) -> Unit)? = null) {
|
fun updateDays(newDays: ArrayList<DayMonthly>, addEvents: Boolean, callback: ((DayMonthly) -> Unit)? = null) {
|
||||||
setupHorizontalOffset()
|
setupHorizontalOffset()
|
||||||
measureSizes()
|
measureSizes()
|
||||||
|
@ -63,13 +100,8 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
||||||
|
|
||||||
private fun measureSizes() {
|
private fun measureSizes() {
|
||||||
dayWidth = (width - horizontalOffset) / 7f
|
dayWidth = (width - horizontalOffset) / 7f
|
||||||
|
|
||||||
// avoid updating the height when coming back from a new event screen, when the keyboard was visible
|
|
||||||
val newHeight = (height - weekDaysLetterHeight) / 6f
|
|
||||||
if (newHeight > dayHeight) {
|
|
||||||
dayHeight = (height - weekDaysLetterHeight) / 6f
|
dayHeight = (height - weekDaysLetterHeight) / 6f
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun addClickableBackgrounds() {
|
private fun addClickableBackgrounds() {
|
||||||
removeAllViews()
|
removeAllViews()
|
||||||
|
|
Loading…
Reference in New Issue