B4A Library [B4X] [XUI] AS CalendarAdvanced 📅 - OneRow/FiveRow Calendar - Expand and Collapse [Payware]

Hey all, after almost a week of work and much frustration, I am proud to share with you a calendar view.
The view is inspired on the calendar view in the outlook app.

This library is not free, because, it cost a lot of time and gray hair to create such views.
Donations from 8€ are valid. (You can donate any amount you want :))
Please write CalendarAdvanced in the order description, thanks.

Thanks for your understanding. :)
  1. Donate
  2. I will send you an e-mail with the code to decrypt the .zip file
  3. Done
NEW Special Days
IMG_5041.jpg

NEW AppointmentType1
IMG_5012.jpg

AppointmentType1,AppointmentType2,AppointmentType3
1618912554091.png
1618912567441.png
1618912577470.png

Collapsed
IMG_3868.jpg

Expanded
IMG_3787.jpg

seamless transition between the two modes
ezgif.com-gif-maker.gif

You can display up to 6 rows
1650315651331.png

You can disable the Expandable to use the view in only one mode, then the bottom drag bar is not visible.

B4J is currently not supported, but will be in the near future.
B4J is now supported.
B4j: jXUI,jDateUtils,jReflection,xCustomListView,ASViewPager
B4a: XUi,DateUtils,Reflection,xCustomListView,ASViewPager
B4i: iXUI,iDateUtils,xCustomListView,ASViewPager,GestureRecognizer
Make sure you are using ASViewPager V1.24+
On B4I you need GestureRecognizer Download the .bas file in the attachment No longer needed since 3.01+
Examples:
change body month names and header week names:
ASCalendarAdvanced1.WeekNameShort = ASCalendarAdvanced1.CreateASCalendarAdvanced_WeekNameShort("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
ASCalendarAdvanced1.MonthNameShort = ASCalendarAdvanced1.CreateASCalendarAdvanced_MonthNameShort("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec")
ASCalendarAdvanced1.UpdateBody 'Update all body items to the new style/text
ASCalendarAdvanced1.UpdateHeader 'Update all header items to the new style/text
Call this in B4XPage_Created or on Form Load and call this after you change something on the body, but only once at runtime
B4X:
'Call this to Build the calendar, unfortunately this is needed, otherwise runtime errors will occur
'Call this after you set all properties you want
ASCalendarAdvanced1.CreateCalendar
Mark all Sundays as a SpecialDay:
Sub ASCalendarAdvanced1_VisibleRangeChanged(StartDate As Long,EndDate As Long)
    Dim sundays As List = ASCalendarAdvanced1.GetDaysBetween2Dates(StartDate,EndDate, 1)
    For Each s As Long In sundays
        ASCalendarAdvanced1.AddSpecialDay(s,xui.Color_ARGB(255,221, 95, 96),"official_holiday")
    Next
    ASCalendarAdvanced1.CommitSpecialDays
End Sub

ASCalendarAdvanced
Author: Alexander Stolte
Version: 3.00

  • ASCalendarAdvanced
    • Events:
      • HeightChanged (Height As Float)
      • SelectedDateChanged (Date As Long)
      • TouchDown
      • TouchUp
      • VisibleRangeChange (StartDate As Long, EndDate As Long)
      • VisibleRangeChanged (StartDate As Long, EndDate As Long)
    • Fields:
      • AppointmentType1BottomAppointmentTyp2Top As Boolean
      • mBase As B4XView
      • Tag As Object
    • Functions:
      • AddAppointmentType1 (date As Long, color As Int) As String
      • AddAppointmentType2 (date As Long, color As Int, text As String, text_color As Int) As String
      • AddAppointmentType3 (start_date As Long, end_date As Long, color As Int) As String
      • AddSpecialDay (date As Long, color As Int, identifier As String) As String
        Adds a new special day - call CommitSpecialDays if youre done with adding
        color - Text Color
        value - e.g. "official_holiday", "birthday","Vacation"
      • Back2CurrentDate As String
        Slides Back or Forward to the Current Date
      • Base_Resize (Width As Double, Height As Double) As String
      • Class_Globals As String
      • Close As String
      • CommitSpecialDays As String
        Commits all new visible special dates
      • CommitStyleChanges As String
        a simple Base_Resize, but all visible items ar updated
      • CreateASCalendarAdvanced_AppointmentType1 (date As Long, color As Int) As ASCalendarAdvanced_AppointmentType1
        simple dot under date
      • CreateASCalendarAdvanced_AppointmentType2 (date As Long, color As Int, text As String, text_color As Int) As ASCalendarAdvanced_AppointmentType2
        short text above date
      • CreateASCalendarAdvanced_AppointmentType2_ItemProperties (xfont As B4XFont, height As Float, padding As Float, corner_radius As Float) As ASCalendarAdvanced_AppointmentType2_ItemProperties
      • CreateASCalendarAdvanced_AppointmentType3 (start_date As Long, end_date As Long, color As Int) As ASCalendarAdvanced_AppointmentType3
      • CreateASCalendarAdvanced_AppointmentType3_ItemProperties (height As Float, alpha_color As Int, corner_radius As Float) As ASCalendarAdvanced_AppointmentType3_ItemProperties
        alpha_color - value between 0 - 255, its the aplha for the range appointments
      • CreateASCalendarAdvanced_BodyTextProperties (TextColor As Int, TextFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String) As ASCalendarAdvanced_BodyTextProperties
      • CreateASCalendarAdvanced_ExtraInfosTextProperties (TextColor As Int, TextFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String) As ASCalendarAdvanced_ExtraInfosTextProperties
      • CreateASCalendarAdvanced_HeaderTextProperties (TextColor As Int, TextFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String) As ASCalendarAdvanced_HeaderTextProperties
      • CreateASCalendarAdvanced_MonthNameShort (January As String, February As String, March As String, April As String, May As String, June As String, July As String, August As String, September As String, October As String, November As String, December As String) As ASCalendarAdvanced_MonthNameShort
      • CreateASCalendarAdvanced_SpecialDay (date As Long, color As Int, identifier As String) As ASCalendarAdvanced_SpecialDay
      • CreateASCalendarAdvanced_WeekNameShort (Monday As String, Tuesday As String, Wednesday As String, Thursday As String, Friday As String, Saturday As String, Sunday As String) As ASCalendarAdvanced_WeekNameShort
      • CreateCalendar
        call this function only once
      • DesignerCreateView (Base As Object, Lbl As Label, Props As Map)
        Base type must be Object
      • Expand As String
      • getAppointmentType2_ItemPropertiest As ASCalendarAdvanced_AppointmentType2_ItemProperties
      • getAppointmentType3_ItemPropertiest As ASCalendarAdvanced_AppointmentType3_ItemProperties
      • getBodyTextProperties As ASCalendarAdvanced_BodyTextProperties
        Call UpdateBody if you change the properties
      • getBottomHeight As Float
        gets or sets the height of the drag-panel on the bottom, to expand or collapse the view
        Default 15dip
      • GetDaysBetween2Dates (StartDate As Long, EndDate As Long, RequiredDayOfWeek As Int) As List
        RequiredDayOfWeek - week starts at 1=sunday,2=monday...
        Call it if you are done adding new special days, makes this way makes the performance better
      • GetExpandedViewHeight As Float
        gets the view height of the expanded view height
      • getExtraInfosTextProperties As ASCalendarAdvanced_ExtraInfosTextProperties
      • getHeaderPanel As B4XView
      • getHeaderTextProperties As ASCalendarAdvanced_HeaderTextProperties
        Call UpdateHeader if you change the properties
      • getMonthNameShort As ASCalendarAdvanced_MonthNameShort
      • getSelectedDate As Long
        gets or sets the selected date
      • GetSpecialDayAt (date As Long) As ASCalendarAdvanced_SpecialDay
        Gets a ASCalendarAdvanced_SpecialDay object on a date if exists
      • getStartDate As Long
        Set this date before you call CreateCalendar
      • getVisibleDateRange As Map
        Public Sub CommitViewPager
        xASVP_Horizontal.Base_Resize(mBase.wi
        End Sub
        gets the current visible date range as map
        <code>Dim tmp_m As Map = ASCalendarAdvanced1.VisibleDateRange
        Log("StartDate: " & DateUtils.TicksToString(tmp_m.Get("StartDate")))
        Log("EndDate: " & DateUtils.TicksToString(tmp_m.Get("EndDate")))</code>
      • getWeekNameShort As ASCalendarAdvanced_WeekNameShort
      • Initialize (Callback As Object, EventName As String) As String
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • Month2WeekKeepSelectedWeekVisible (keep As Boolean) As String
        If you switch from MonthView to WeekView then the selected day keeps visible
        Default: True
      • NextWeek As String
        Scrolls to the next week or month it depends on the expanded state
      • PreviousWeek As String
        Scrolls to the previous week or month it depends on the expanded state
      • RemoveAppointmentType1 (date As Long) As String
        if there are multiple AppointmentType1 on the date, then all of them will be removed
      • RemoveAppointmentType2 (date As Long) As String
        removes AppointmentType2 on that day
        call CommitStyleChanges if youre done with removing
      • RemoveOneAppointmentType1 (date As Long) As String
        if there are multiple AppointmentType1 on the date, then one of them will be removed
        call CommitStyleChanges if youre done with removing
      • RemoveSpecialDay (date As Long) As String
        Removes a special day - call CommitSpecialDays if youre done with adding
      • Reset (ApType1 As Boolean, ApType2 As Boolean, ApType3 As Boolean, SpecialDays As Boolean) As String
        removes all appointments or special days. Set to "True" to control what should be reset
        call CommitStyleChanges if youre resetting the SpecialDays
      • Scroll2Date (Date As Long)
        Slides Back or Forward to a special date
      • setAppointmentType2_ItemPropertiest (ItemProperties As ASCalendarAdvanced_AppointmentType2_ItemProperties) As String
      • setAppointmentType3_ItemPropertiest (ItemProperties As ASCalendarAdvanced_AppointmentType3_ItemProperties) As String
      • setBodyColor (Color As Int) As String
        sets the body color
        the complete calendar is rebuilt at the action
      • setBodyTextProperties (BodyTextProperties As ASCalendarAdvanced_BodyTextProperties) As String
      • setBottomColor (Color As Int) As String
        sets the bottom color
      • setBottomHeight (height As Float) As String
        gets or sets the height of the drag-panel on the bottom, to expand or collapse the view
        Default 15dip
        call CommitStyleChanges if you change the value
      • setExtraInfosTextProperties (ExtraInfosTextProperties As ASCalendarAdvanced_ExtraInfosTextProperties) As String
      • setExtraItemGap (gap As Float) As String
        sets the ExtraItemGab - is to prevent the font from covering the month number
        Default 6dip
        call CommitStyleChanges if you change the value
      • setFirstDayOfWeek (number As Int) As String
        1-7 - set this before you call CreateCalendar
        Friday = 1
        Thursday = 2
        Wednesday = 3
        Tuesday = 4
        Monday = 5
        Sunday = 6
        Saturday = 7
      • setHeaderColor (Color As Int) As String
        sets the Header Color
      • setHeaderTextProperties (HeaderTextProperties As ASCalendarAdvanced_HeaderTextProperties) As String
      • setKeepSelectedDate (keep As Boolean) As String
        Default: False
        WeekView: The same week day is selected if you switch to the next week e.g. Monday 05.07.201-> Monday 12.07.2021
        MonthView: The same date is selected if you switch to the next month e.g 22.07.2021-> 22.08.2021
      • setLimit2Forward (OnlyFuture As Boolean) As String
        Limit the calendar to the current time period and the future
        Default: False
      • SetLimitRange (StartMonth As Long, EndMonth As Long) As String
        Limit the calendar to a certain range of months
        Set one of them to 0 if you dont want a limit
      • setMonthNameShort (MonthNameShort As ASCalendarAdvanced_MonthNameShort) As String
      • setOtherMonthBackgroundColor (Color As Int) As String
        sets the background color of the other month when 2 months are displayed in one
        the complete calendar is rebuilt at the action
      • setSelectedDate (date As Long) As String
        gets or sets the selected date
      • setShowFirstWeekOfMonthInFirstRow (show As Boolean) As String
        if the calendar is expanded, then the 1st week of the month will be in the 1st row
      • setShowOtherMonths (show As Boolean) As String
        Only in MonthView - set it to False if you dont show the days from the next or previous month
        Default: True
      • setStartDate (date As Long) As String
        Set this date before you call CreateCalendar
      • setWeekNameShort (WeekNameShort As ASCalendarAdvanced_WeekNameShort) As String
      • SpecialDayExists (date As Long) As Boolean
        Returns True if a special day is already added to a date
      • UpdateAll As String
        UpdateBody and UpdateHeader in one
      • UpdateBody As String
      • UpdateHeader As String
    • Properties:
      • AppointmentType2_ItemPropertiest As ASCalendarAdvanced_AppointmentType2_ItemProperties
      • AppointmentType3_ItemPropertiest As ASCalendarAdvanced_AppointmentType3_ItemProperties
      • BodyColor
        sets the body color
        the complete calendar is rebuilt at the action
      • BodyTextProperties As ASCalendarAdvanced_BodyTextProperties
        Call UpdateBody if you change the properties
      • BottomColor
        sets the bottom color
      • BottomHeight As Float
        gets or sets the height of the drag-panel on the bottom, to expand or collapse the view
        Default 15dip
      • ExtraInfosTextProperties As ASCalendarAdvanced_ExtraInfosTextProperties
      • ExtraItemGap
        sets the ExtraItemGab - is to prevent the font from covering the month number
        Default 6dip
        call CommitStyleChanges if you change the value
      • FirstDayOfWeek
        1-7 - set this before you call CreateCalendar
        Friday = 1
        Thursday = 2
        Wednesday = 3
        Tuesday = 4
        Monday = 5
        Sunday = 6
        Saturday = 7
      • HeaderColor
        sets the Header Color
      • HeaderPanel As B4XView [read only]
      • HeaderTextProperties As ASCalendarAdvanced_HeaderTextProperties
        Call UpdateHeader if you change the properties
      • KeepSelectedDate
        Default: False
        WeekView: The same week day is selected if you switch to the next week e.g. Monday 05.07.201-> Monday 12.07.2021
        MonthView: The same date is selected if you switch to the next month e.g 22.07.2021-> 22.08.2021
      • Limit2Forward
        Limit the calendar to the current time period and the future
        Default: False
      • MonthNameShort As ASCalendarAdvanced_MonthNameShort
      • OtherMonthBackgroundColor
        sets the background color of the other month when 2 months are displayed in one
        the complete calendar is rebuilt at the action
      • SelectedDate As Long
        gets or sets the selected date
      • ShowFirstWeekOfMonthInFirstRow
        if the calendar is expanded, then the 1st week of the month will be in the 1st row
      • ShowOtherMonths
        Only in MonthView - set it to False if you dont show the days from the next or previous month
        Default: True
      • StartDate As Long
        Set this date before you call CreateCalendar
      • VisibleDateRange As Map [read only]
        Public Sub CommitViewPager
        xASVP_Horizontal.Base_Resize(mBase.wi
        End Sub
        gets the current visible date range as map
        <code>Dim tmp_m As Map = ASCalendarAdvanced1.VisibleDateRange
        Log("StartDate: " & DateUtils.TicksToString(tmp_m.Get("StartDate")))
        Log("EndDate: " & DateUtils.TicksToString(tmp_m.Get("EndDate")))</code>
      • WeekNameShort As ASCalendarAdvanced_WeekNameShort
  • ASCalendarAdvanced_AppointmentType1
    • Fields:
      • color As Int
      • date As Long
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_AppointmentType2
    • Fields:
      • color As Int
      • date As Long
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • text As String
      • text_color As Int
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_AppointmentType2_ItemProperties
    • Fields:
      • corner_radius As Float
      • height As Float
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • padding As Float
      • xfont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_AppointmentType3
    • Fields:
      • color As Int
      • end_date As Long
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • start_date As Long
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_AppointmentType3_ItemProperties
    • Fields:
      • alpha_color As Int
      • corner_radius As Float
      • height As Float
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_BodyTextProperties
    • Fields:
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • TextFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_ExtraInfosTextProperties
    • Fields:
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • TextFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_HeaderTextProperties
    • Fields:
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • TextFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_MonthNameShort
    • Fields:
      • April As String
      • August As String
      • December As String
      • February As String
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • January As String
      • July As String
      • June As String
      • March As String
      • May As String
      • November As String
      • October As String
      • September As String
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_SpecialDay
    • Fields:
      • color As Int
      • date As Long
      • identifier As String
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_WeekNameShort
    • Fields:
      • Friday As String
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • Monday As String
      • Saturday As String
      • Sunday As String
      • Thursday As String
      • Tuesday As String
      • Wednesday As String
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • WeekCounter
  • Vertical Swipe
  • MultiSelect
  • HideOtherMonths
  • Scroll2NextMonthIfClickOnNextMonth
  • AppointmentType1 - automatically display a + symbol when too many have been added
  • AppointmentType2 - support of multiple in one day e.g. for symbols
If you have features or something is still missing, let me know.
Changelog
  • 1.00
    • Release
  • 1.01
    • BugFixes
    • Add set ShowFirstWeekOfMonthInFirstRow - if the calendar is expanded, then the 1st week of the month will be in the 1st row - set this to true before you call "CreateCalendar"
  • 1.02
    • Add get VisibleDateRange- gets the current visible date range as map
    • BugFixes if ShowFirstWeekOfMonthInFirstRow is True
  • 1.03
    • Many BugFixes
    • ShowFirstWeekOfMonthInFirstRow is now fully implemented
  • 1.04
    • B4J Support
      • DoubleClick on Bottom to Expand or Collapse
        • Depend on Expandable
    • Add Designer Property ShowFirstWeekOfMonthInFirstRow - if the calendar is expanded then the 1st week of the month will be in the 1st row
  • 1.05 (read more about this update)
    • Important BugFixes if the view is expanded
    • Add AppointmentType1 - dots under a date
      • Add SetAppointmentType1 - adds an appointment to a date
      • IMG_5012.jpg
  • 1.06
    • BugFix
  • 1.07 (read more about this update)
    • SetAppointmentType1 renamed to AddAppointmentType1
    • BugFix on VisibleRangeChanged
    • Add GetDaysBetween2Dates - Returns a list of dates at a special day in a week e.g. all sundays between 2 dates
    • Add AddSpecialDay - Adds a new special day
      • IMG_5041.jpg
      • Add CommitSpecialDays - Commits all new visible special dates
      • Add SpecialDayExists - Returns True if a special day is already added to a date
      • Add GetSpecialDayAt - Gets a ASCalendarAdvanced_SpecialDay object on a date if exists
      • Add RemoveSpecialDay - Removes a special day
  • 2.00 (read more about this update)
    • BugFixes
    • Expand with fingers is now smooth
    • Add AppointmentType2 - Text Label above date
      • Add AddAppointmentType2 - adds an appointment to a date
    • Add AppointmentType3 - mark a range between 2 dates
      • Add AddAppointmentType3 - adds an range appointment between 2 dates
    • Add set and get AppointmentType2_ItemPropertiest - change the properties to customize AppointmentType2 look and feel e.g. corner_radius or padding
    • Add set and get AppointmentType3_ItemPropertiest - change the properties to customize AppointmentType3 look and feel e.g. corner_radius or aplha color
    • Add get and set BottomHeight - gets or sets the height of the drag-panel on the bottom, to expand or collapse the view
    • Add CommitStyleChanges - a simple Base_Resize, but all visible items ar updated
    • Add Event TouchDown - fires if the user touch the expand panel
    • Add Event TouchUp - fires if the user release the expand panel
    • Add Function GetExpandedViewHeight - gets the view height of the expanded view height
    • Add RemoveOneAppointmentType1 - if there are multiple AppointmentType1 on the date, then one of them will be removed
    • Add RemoveAppointmentType1 - if there are multiple AppointmentType1 on the date, then all of them will be removed
    • Add RemoveAppointmentType2 - removes AppointmentType2 on that day
    • Add Reset - removes all appointments or special days. Set to "True" to control what should be reset
    • Add set ExtraItemGap - is to prevent the font from covering the month number
  • 2.01 (read more about this update)
    • BugFix - Back2CurrentDay the current day panel has covered the day label
    • BugFix - AppointmentType3
    • Add get HeaderPanel - gets the header panel (code example)
    • Add set and get SelectedDate - gets or sets the selected date
    • BugFix - Removing Appointments
  • 2.02
    • BugFix
  • 2.04
    • Base_Resize is now public
    • Intern Function IIF renamed to iif2
  • 2.05 (read more about this update)
    • Add StartDate - Set here the date where you want to start - set this before you call CreateCalendar
    • Add FirstDayOfWeek - 1-7 - set this before you call CreateCalendar
  • 2.06 (read more about this update)
    • BugFix New Handling of other Months
      • not the whole next month is in a different color, but only the days that are not in the current month
    • Add KeepSelectedDate
      • Default: False
      • WeekView: The same week day is selected if you switch to the next week e.g. Monday 05.07.201-> Monday 12.07.2021
      • MonthView: The same date is selected if you switch to the next month e.g 22.07.2021-> 22.08.2021
    • Add Month2WeekKeepSelectedWeekVisible - If you switch from MonthView to WeekView then the selected day keeps visible
      • Default: True
    • Add ShowOtherMonths - Only in MonthView - set it to False if you dont show the days from the next or previous month
      • Default: True
  • 2.07
    • BugFix B4A and B4J HeightChanged event is now firing
  • 2.08
    • Intern Function iif2 removed and the core iif is now used
      • B4A V11+ - B4J V9.10+ - B4I V7.50+
    • B4I better perfomance on Page Change with ASViewPager V1.18+
    • B4I better perfomance on Expand and Collapse with finger and with the functions
    • BugFixes
  • 2.10 (read more about this update)
    • New Event VisibleRangeChange - is triggered before the new page is completely visible.
    • Add SetLimitRange - Limit the calendar to a certain range of months
      • Set one of them to 0 if you dont want a limit
  • 2.11 (read more about this update)
    • Designer Property "Expanded" a better handling of the view
      • If True the full height is used to display the view expanded
      • IF False the full height is used to display the view collapsed
      • Old Handling:
        • If True the full height is used to display the view collapsed and from the body height the expanded heihgt was calculated
    • Designer Property "BodyItemHeightInPercentage" Removed
      • was a poor indicator of how big the header is
    • Add Desinger Property "HeaderHeight" - Determines the size of the header. The larger the number the less space the items have in the body
    • Add Designer Property "KeepSelectedDate"
    • Add Designer Porperty "BottomHeight" - the height of the drag-panel on the bottom, to expand or collapse the view
    • Add Designer Property "ShowOtherMonths" - Only in MonthView - set it to False if you dont show the days from the next or previous month
    • Add Expand - Expands the view
    • Add Close - Collsaps the view
    • B4J BugFixes
  • 2.12
    • Add set HeaderColor
    • Add set BodyColor - the complete calendar is rebuilt at the action
    • Add set BottomColor
    • Add set OtherMonthBackgroundColor - the complete calendar is rebuilt at the action
  • 2.13
    • BugFix - The event "VisibleRangeChange" was not triggered when creating the calendar
  • 2.14
    • Add AppointmentType1BottomAppointmentTyp2Top - If false then AppointmentType1 is on Top and Type2 is on the bottom
  • 2.15
    • Add set Limit2Forward - Limit the calendar to the current time period and the future - set it to true before CreateCalendar
    • Add 2 property descriptions for better understanding
  • 2.16
    • Add PastDaysTextColor to BodyTextProperties - The text color for days that lie in the past - standard value is -1 (All days have the same color)
  • 2.17
    • Add KeepAppointmentsVisibleOnSelect - if True, then the appointments are visible if you select the day - Default: False
    • BugFixes
  • 2.18
    • Removes log messages that should not be there
  • 2.19
    • Add Designer Property FirstDayOfWeek
    • VisibleRangeChange and VisibleRangeChanged are now also triggered when you expand the calendar
    • BugFixes
  • 2.20
    • BugFixes
    • Add TextAlignment_Horizontal property to AppointmentType2_ItemProperties - LEFT,RIGHT,CENTER
      • Default: CENTER
  • 2.21 (read more about this update)
    • CrashFix - UpdateBody
    • Add CurrentDateProperties - you can now customize the current date
      • TextColor -TextFont -IndicatorColor -IndicatorCornerRadius -IndicatorHeight
    • Add SelectedDateProperties - you can now customize the selected date indicator
      • IndicatorColor -IndicatorCornerRadius -IndicatorHeight
    • Add AppointmentType1_ItemProperties
      • Height
        • Default: 5dip
      • Padding
        • Default: 0dip
  • 2.22
    • Add set CurrentDayBehindAppointments - if False then the current day indicator is before the appointments_type3
      • Default: True
    • The Selected Day Indicator is now always in front
  • 2.23
    • VisibleRangeChange and VisibleRangeChanged are now also triggered when you close the calendar
    • Add get Expanded - Checks if the calendar is expanded or collapsed
    • AppointmentType1 and 2 are now always in front
  • 3.00
    • The View now uses the LazyLoading technique
    • ASViewPager V1.30+ is required
    • BugFixes
  • 3.01
    • B4I The GestureRecognizer is no longer needed
  • 3.02
    • Add Designer Property WeekRowCount - You can now display 6 rows in a month
      • Default: 5
      • Its locked to 5 and 6
  • 3.03
    • Property ShowFirstWeekOfMonthInFirstRow removed
      • First week of month is always in the first row
    • BugFixes
  • 3.04
    • Add Refresh - Applies all changes and displays them
      • do the same as CommitStyleChanges
    • Call Refresh after you add one or some "AddAppointmentType1"
    • Minor Adjustments
  • 3.05
    • B4J only - Add Designer Property MouseHoverFeedback
      • Default: True
  • 3.06
    • BugFixes
  • 3.07
    • BugFixes
Have Fun :)
 

Attachments

  • GestureRecognizer.bas
    11.2 KB · Views: 302
  • 2.10 Backup ASCalendarAdvanced.zip
    14.3 KB · Views: 226
  • Example AS CalendarAdvanced.zip
    12.7 KB · Views: 315
  • 2.23 Backup ASCalendarAdvanced.zip
    16.7 KB · Views: 35
  • 3.02 Backup ASCalendarAdvanced.zip
    18 KB · Views: 15
  • ASCalendarAdvanced.zip
    18.3 KB · Views: 11
Last edited:

syerif

Member
Licensed User
Longtime User
Hey all, after almost a week of work and much frustration, I am proud to share with you a calendar view.
The view is inspired on the calendar view in the outlook app.

This library is not free, because, it cost a lot of time and gray hair to create such views.
Donations from 7€ or 8$ are valid. (You can donate any amount you want :))
Please write CalendarAdvanced in the order description, thanks.

Thanks for your understanding. :)
  1. Donate
  2. I will send you an e-mail with the code to decrypt the .zip file
  3. Done
NEW Special Days
View attachment 111691
NEW AppointmentType1
View attachment 111579
AppointmentType1,AppointmentType2,AppointmentType3
View attachment 111973 View attachment 111974 View attachment 111975
Collapsed
View attachment 109984
Expanded
View attachment 109983
seamless transition between the two modes
View attachment 109985
You can disable the Expandable to use the view in only one mode, then the bottom drag bar is not visible.

B4J is currently not supported, but will be in the near future.
B4J is now supported.
B4j: jXUI,jDateUtils,jReflection,xCustomListView,ASViewPager
B4a: XUi,DateUtils,Reflection,xCustomListView,ASViewPager
B4i: iXUI,iDateUtils,xCustomListView,ASViewPager,GestureRecognizer
Make sure you are using ASViewPager V1.24+
On B4I you need GestureRecognizer Download the .bas file in the attachment
Examples:
change body month names and header week names:
ASCalendarAdvanced1.WeekNameShort = ASCalendarAdvanced1.CreateASCalendarAdvanced_WeekNameShort("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
ASCalendarAdvanced1.MonthNameShort = ASCalendarAdvanced1.CreateASCalendarAdvanced_MonthNameShort("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec")
ASCalendarAdvanced1.UpdateBody 'Update all body items to the new style/text
ASCalendarAdvanced1.UpdateHeader 'Update all header items to the new style/text
Call this in B4XPage_Created or on Form Load and call this after you change something on the body, but only once at runtime
B4X:
'Call this to Build the calendar, unfortunately this is needed, otherwise runtime errors will occur
'Call this after you set all properties you want
ASCalendarAdvanced1.CreateCalendar
Mark all Sundays as a SpecialDay:
Sub ASCalendarAdvanced1_VisibleRangeChanged(StartDate As Long,EndDate As Long)
    Dim sundays As List = ASCalendarAdvanced1.GetDaysBetween2Dates(StartDate,EndDate, 1)
    For Each s As Long In sundays
        ASCalendarAdvanced1.AddSpecialDay(s,xui.Color_ARGB(255,221, 95, 96),"official_holiday")
    Next
    ASCalendarAdvanced1.CommitSpecialDays
End Sub

ASCalendarAdvanced
Author: Alexander Stolte
Version: 2.06

  • ASCalendarAdvanced
    • Events:
      • HeightChanged (Height As Float)
      • SelectedDateChanged (Date As Long)
      • TouchDown
      • TouchUp
      • VisibleRangeChanged (StartDate As Long, EndDate As Long)
    • Fields:
      • mBase As B4XView
      • Tag As Object
    • Functions:
      • AddAppointmentType1 (date As Long, color As Int) As String
      • AddAppointmentType2 (date As Long, color As Int, text As String, text_color As Int) As String
      • AddAppointmentType3 (start_date As Long, end_date As Long, color As Int) As String
      • AddSpecialDay (date As Long, color As Int, identifier As String) As String
        Adds a new special day - call CommitSpecialDays if youre done with adding
        color - Text Color
        value - e.g. "official_holiday", "birthday","Vacation"
      • Back2CurrentDate As String
        Slides Back or Forward to the Current Date
      • Base_Resize (Width As Double, Height As Double) As String
      • Class_Globals As String
      • CommitSpecialDays As String
        Commits all new visible special dates
      • CommitStyleChanges As String
        a simple Base_Resize, but all visible items ar updated
      • CreateASCalendarAdvanced_AppointmentType1 (date As Long, color As Int) As ASCalendarAdvanced_AppointmentType1
        simple dot under date
      • CreateASCalendarAdvanced_AppointmentType2 (date As Long, color As Int, text As String, text_color As Int) As ASCalendarAdvanced_AppointmentType2
        short text above date
      • CreateASCalendarAdvanced_AppointmentType2_ItemProperties (xfont As B4XFont, height As Float, padding As Float, corner_radius As Float) As ASCalendarAdvanced_AppointmentType2_ItemProperties
      • CreateASCalendarAdvanced_AppointmentType3 (start_date As Long, end_date As Long, color As Int) As ASCalendarAdvanced_AppointmentType3
      • CreateASCalendarAdvanced_AppointmentType3_ItemProperties (height As Float, alpha_color As Int, corner_radius As Float) As ASCalendarAdvanced_AppointmentType3_ItemProperties
        alpha_color - value between 0 - 255, its the aplha for the range appointments
      • CreateASCalendarAdvanced_BodyTextProperties (TextColor As Int, TextFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String) As ASCalendarAdvanced_BodyTextProperties
      • CreateASCalendarAdvanced_ExtraInfosTextProperties (TextColor As Int, TextFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String) As ASCalendarAdvanced_ExtraInfosTextProperties
      • CreateASCalendarAdvanced_HeaderTextProperties (TextColor As Int, TextFont As B4XFont, TextAlignment_Vertical As String, TextAlignment_Horizontal As String) As ASCalendarAdvanced_HeaderTextProperties
      • CreateASCalendarAdvanced_MonthNameShort (January As String, February As String, March As String, April As String, May As String, June As String, July As String, August As String, September As String, October As String, November As String, December As String) As ASCalendarAdvanced_MonthNameShort
      • CreateASCalendarAdvanced_SpecialDay (date As Long, color As Int, identifier As String) As ASCalendarAdvanced_SpecialDay
      • CreateASCalendarAdvanced_WeekNameShort (Monday As String, Tuesday As String, Wednesday As String, Thursday As String, Friday As String, Saturday As String, Sunday As String) As ASCalendarAdvanced_WeekNameShort
      • CreateCalendar
        call this function only once
      • DesignerCreateView (Base As Object, Lbl As Label, Props As Map) As String
        Base type must be Object
      • getAppointmentType2_ItemPropertiest As ASCalendarAdvanced_AppointmentType2_ItemProperties
      • getAppointmentType3_ItemPropertiest As ASCalendarAdvanced_AppointmentType3_ItemProperties
      • getBodyTextProperties As ASCalendarAdvanced_BodyTextProperties
      • getBottomHeight As Float
        gets or sets the height of the drag-panel on the bottom, to expand or collapse the view
        Default 15dip
      • GetDaysBetween2Dates (StartDate As Long, EndDate As Long, RequiredDayOfWeek As Int) As List
        RequiredDayOfWeek - week starts at 1=sunday,2=monday...
        Call it if you are done adding new special days, makes this way makes the performance better
      • GetExpandedViewHeight As Float
        gets the view height of the expanded view height
      • getExtraInfosTextProperties As ASCalendarAdvanced_ExtraInfosTextProperties
      • getHeaderPanel As B4XView
      • getHeaderTextProperties As ASCalendarAdvanced_HeaderTextProperties
      • getMonthNameShort As ASCalendarAdvanced_MonthNameShort
      • getSelectedDate As Long
        gets or sets the selected date
      • GetSpecialDayAt (date As Long) As ASCalendarAdvanced_SpecialDay
        Gets a ASCalendarAdvanced_SpecialDay object on a date if exists
      • getStartDate As Long
        Set this date before you call CreateCalendar
      • getVisibleDateRange As Map
        Public Sub CommitViewPager
        xASVP_Horizontal.Base_Resize(mBase.wi
        End Sub
        gets the current visible date range as map
        <code>Dim tmp_m As Map = ASCalendarAdvanced1.VisibleDateRange
        Log("StartDate: " & DateUtils.TicksToString(tmp_m.Get("StartDate")))
        Log("EndDate: " & DateUtils.TicksToString(tmp_m.Get("EndDate")))</code>
      • getWeekNameShort As ASCalendarAdvanced_WeekNameShort
      • Initialize (Callback As Object, EventName As String) As String
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • Month2WeekKeepSelectedWeekVisible (keep As Boolean) As String
        If you switch from MonthView to WeekView then the selected day keeps visible
        Default: True
      • NextWeek As String
        Scrolls to the next week or month it depends on the expanded state
      • PreviousWeek As String
        Scrolls to the previous week or month it depends on the expanded state
      • RemoveAppointmentType1 (date As Long) As String
        if there are multiple AppointmentType1 on the date, then all of them will be removed
      • RemoveAppointmentType2 (date As Long) As String
        removes AppointmentType2 on that day
        call CommitStyleChanges if youre done with removing
      • RemoveOneAppointmentType1 (date As Long) As String
        if there are multiple AppointmentType1 on the date, then one of them will be removed
        call CommitStyleChanges if youre done with removing
      • RemoveSpecialDay (date As Long) As String
        Removes a special day - call CommitSpecialDays if youre done with adding
      • Reset (ApType1 As Boolean, ApType2 As Boolean, ApType3 As Boolean, SpecialDays As Boolean) As String
        removes all appointments or special days. Set to "True" to control what should be reset
        call CommitStyleChanges if youre resetting the SpecialDays
      • Scroll2Date (Date As Long) As String
        Slides Back or Forward to a special date
      • setAppointmentType2_ItemPropertiest (ItemProperties As ASCalendarAdvanced_AppointmentType2_ItemProperties) As String
      • setAppointmentType3_ItemPropertiest (ItemProperties As ASCalendarAdvanced_AppointmentType3_ItemProperties) As String
      • setBodyTextProperties (BodyTextProperties As ASCalendarAdvanced_BodyTextProperties) As String
      • setBottomHeight (height As Float) As String
        gets or sets the height of the drag-panel on the bottom, to expand or collapse the view
        Default 15dip
        call CommitStyleChanges if you change the value
      • setExtraInfosTextProperties (ExtraInfosTextProperties As ASCalendarAdvanced_ExtraInfosTextProperties) As String
      • setExtraItemGap (gap As Float) As String
        sets the ExtraItemGab - is to prevent the font from covering the month number
        Default 6dip
        call CommitStyleChanges if you change the value
      • setFirstDayOfWeek (number As Int) As String
        1-7 - set this before you call CreateCalendar
        Friday = 1
        Thursday = 2
        Wednesday = 3
        Tuesday = 4
        Monday = 5
        Sunday = 6
        Saturday = 7
      • setHeaderTextProperties (HeaderTextProperties As ASCalendarAdvanced_HeaderTextProperties) As String
      • setKeepSelectedDate (keep As Boolean) As String
        Default: False
        WeekView: The same week day is selected if you switch to the next week e.g. Monday 05.07.201-> Monday 12.07.2021
        MonthView: The same date is selected if you switch to the next month e.g 22.07.2021-> 22.08.2021
      • setMonthNameShort (MonthNameShort As ASCalendarAdvanced_MonthNameShort) As String
      • setSelectedDate (date As Long) As String
        gets or sets the selected date
      • setShowFirstWeekOfMonthInFirstRow (show As Boolean) As String
        if the calendar is expanded, then the 1st week of the month will be in the 1st row
      • setShowOtherMonths (show As Boolean) As String
        Only in MonthView - set it to False if you dont show the days from the next or previous month
        Default: True
      • setStartDate (date As Long) As String
        Set this date before you call CreateCalendar
      • setWeekNameShort (WeekNameShort As ASCalendarAdvanced_WeekNameShort) As String
      • SpecialDayExists (date As Long) As Boolean
        Returns True if a special day is already added to a date
      • UpdateAll As String
        UpdateBody and UpdateHeader in one
      • UpdateBody As String
      • UpdateHeader As String
    • Properties:
      • AppointmentType2_ItemPropertiest As ASCalendarAdvanced_AppointmentType2_ItemProperties
      • AppointmentType3_ItemPropertiest As ASCalendarAdvanced_AppointmentType3_ItemProperties
      • BodyTextProperties As ASCalendarAdvanced_BodyTextProperties
      • BottomHeight As Float
        gets or sets the height of the drag-panel on the bottom, to expand or collapse the view
        Default 15dip
      • ExtraInfosTextProperties As ASCalendarAdvanced_ExtraInfosTextProperties
      • ExtraItemGap
        sets the ExtraItemGab - is to prevent the font from covering the month number
        Default 6dip
        call CommitStyleChanges if you change the value
      • FirstDayOfWeek
        1-7 - set this before you call CreateCalendar
        Friday = 1
        Thursday = 2
        Wednesday = 3
        Tuesday = 4
        Monday = 5
        Sunday = 6
        Saturday = 7
      • HeaderPanel As B4XView [read only]
      • HeaderTextProperties As ASCalendarAdvanced_HeaderTextProperties
      • KeepSelectedDate
        Default: False
        WeekView: The same week day is selected if you switch to the next week e.g. Monday 05.07.201-> Monday 12.07.2021
        MonthView: The same date is selected if you switch to the next month e.g 22.07.2021-> 22.08.2021
      • MonthNameShort As ASCalendarAdvanced_MonthNameShort
      • SelectedDate As Long
        gets or sets the selected date
      • ShowFirstWeekOfMonthInFirstRow
        if the calendar is expanded, then the 1st week of the month will be in the 1st row
      • ShowOtherMonths
        Only in MonthView - set it to False if you dont show the days from the next or previous month
        Default: True
      • StartDate As Long
        Set this date before you call CreateCalendar
      • VisibleDateRange As Map [read only]
        Public Sub CommitViewPager
        xASVP_Horizontal.Base_Resize(mBase.wi
        End Sub
        gets the current visible date range as map
        <code>Dim tmp_m As Map = ASCalendarAdvanced1.VisibleDateRange
        Log("StartDate: " & DateUtils.TicksToString(tmp_m.Get("StartDate")))
        Log("EndDate: " & DateUtils.TicksToString(tmp_m.Get("EndDate")))</code>
      • WeekNameShort As ASCalendarAdvanced_WeekNameShort
  • ASCalendarAdvanced_AppointmentType1
    • Fields:
      • color As Int
      • date As Long
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_AppointmentType2
    • Fields:
      • color As Int
      • date As Long
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • text As String
      • text_color As Int
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_AppointmentType2_ItemProperties
    • Fields:
      • corner_radius As Float
      • height As Float
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • padding As Float
      • xfont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_AppointmentType3
    • Fields:
      • color As Int
      • end_date As Long
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • start_date As Long
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_AppointmentType3_ItemProperties
    • Fields:
      • alpha_color As Int
      • corner_radius As Float
      • height As Float
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_BodyTextProperties
    • Fields:
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • TextFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_ExtraInfosTextProperties
    • Fields:
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • TextFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_HeaderTextProperties
    • Fields:
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • TextAlignment_Horizontal As String
      • TextAlignment_Vertical As String
      • TextColor As Int
      • TextFont As B4XFont
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_MonthNameShort
    • Fields:
      • April As String
      • August As String
      • December As String
      • February As String
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • January As String
      • July As String
      • June As String
      • March As String
      • May As String
      • November As String
      • October As String
      • September As String
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_SpecialDay
    • Fields:
      • color As Int
      • date As Long
      • identifier As String
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • ASCalendarAdvanced_WeekNameShort
    • Fields:
      • Friday As String
      • IsInitialized As Boolean
        Tests whether the object has been initialized.
      • Monday As String
      • Saturday As String
      • Sunday As String
      • Thursday As String
      • Tuesday As String
      • Wednesday As String
    • Functions:
      • Initialize
        Initializes the fields to their default value.
  • WeekCounter
  • Vertical Swipe
  • MultiSelect
  • HideOtherMonths
  • Scroll2NextMonthIfClickOnNextMonth
  • AppointmentType1 - automatically display a + symbol when too many have been added
  • AppointmentType2 - support of multiple in one day e.g. for symbols
If you have features or something is still missing, let me know.
Changelog
  • 1.00
    • Release
  • 1.01
    • BugFixes
    • Add set ShowFirstWeekOfMonthInFirstRow - if the calendar is expanded, then the 1st week of the month will be in the 1st row - set this to true before you call "CreateCalendar"
  • 1.02
    • Add get VisibleDateRange- gets the current visible date range as map
    • BugFixes if ShowFirstWeekOfMonthInFirstRow is True
  • 1.03
    • Many BugFixes
    • ShowFirstWeekOfMonthInFirstRow is now fully implemented
  • 1.04
    • B4J Support
      • DoubleClick on Bottom to Expand or Collapse
        • Depend on Expandable
    • Add Designer Property ShowFirstWeekOfMonthInFirstRow - if the calendar is expanded then the 1st week of the month will be in the 1st row
  • 1.05 (read more about this update)
    • Important BugFixes if the view is expanded
    • Add AppointmentType1 - dots under a date
  • 1.06
    • BugFix
  • 1.07 (read more about this update)
    • SetAppointmentType1 renamed to AddAppointmentType1
    • BugFix on VisibleRangeChanged
    • Add GetDaysBetween2Dates - Returns a list of dates at a special day in a week e.g. all sundays between 2 dates
    • Add AddSpecialDay - Adds a new special day
      • View attachment 111691
      • Add CommitSpecialDays - Commits all new visible special dates
      • Add SpecialDayExists - Returns True if a special day is already added to a date
      • Add GetSpecialDayAt - Gets a ASCalendarAdvanced_SpecialDay object on a date if exists
      • Add RemoveSpecialDay - Removes a special day
  • 2.00 (read more about this update)
    • BugFixes
    • Expand with fingers is now smooth
    • Add AppointmentType2 - Text Label above date
      • Add AddAppointmentType2 - adds an appointment to a date
    • Add AppointmentType3 - mark a range between 2 dates
      • Add AddAppointmentType3 - adds an range appointment between 2 dates
    • Add set and get AppointmentType2_ItemPropertiest - change the properties to customize AppointmentType2 look and feel e.g. corner_radius or padding
    • Add set and get AppointmentType3_ItemPropertiest - change the properties to customize AppointmentType3 look and feel e.g. corner_radius or aplha color
    • Add get and set BottomHeight - gets or sets the height of the drag-panel on the bottom, to expand or collapse the view
    • Add CommitStyleChanges - a simple Base_Resize, but all visible items ar updated
    • Add Event TouchDown - fires if the user touch the expand panel
    • Add Event TouchUp - fires if the user release the expand panel
    • Add Function GetExpandedViewHeight - gets the view height of the expanded view height
    • Add RemoveOneAppointmentType1 - if there are multiple AppointmentType1 on the date, then one of them will be removed
    • Add RemoveAppointmentType1 - if there are multiple AppointmentType1 on the date, then all of them will be removed
    • Add RemoveAppointmentType2 - removes AppointmentType2 on that day
    • Add Reset - removes all appointments or special days. Set to "True" to control what should be reset
    • Add set ExtraItemGap - is to prevent the font from covering the month number
  • 2.01 (read more about this update)
    • BugFix - Back2CurrentDay the current day panel has covered the day label
    • BugFix - AppointmentType3
    • Add get HeaderPanel - gets the header panel (code example)
    • Add set and get SelectedDate - gets or sets the selected date
    • BugFix - Removing Appointments
  • 2.02
    • BugFix
  • 2.04
    • Base_Resize is now public
    • Intern Function IIF renamed to iif2
  • 2.05 (read more about this update)
    • Add StartDate - Set here the date where you want to start - set this before you call CreateCalendar
    • Add FirstDayOfWeek - 1-7 - set this before you call CreateCalendar
  • 2.06 (read more about this update)
    • BugFix New Handling of other Months
      • not the whole next month is in a different color, but only the days that are not in the current month
    • Add KeepSelectedDate
      • Default: False
      • WeekView: The same week day is selected if you switch to the next week e.g. Monday 05.07.201-> Monday 12.07.2021
      • MonthView: The same date is selected if you switch to the next month e.g 22.07.2021-> 22.08.2021
    • Add Month2WeekKeepSelectedWeekVisible - If you switch from MonthView to WeekView then the selected day keeps visible
      • Default: True
    • Add ShowOtherMonths - Only in MonthView - set it to False if you dont show the days from the next or previous month
      • Default: True
  • 2.07
    • BugFix B4A and B4J HeightChanged event is now firing
  • 2.08
    • Intern Function iif2 removed and the core iif is now used
      • B4A V11+ - B4J V9.10+ - B4I V7.50+
    • B4I better perfomance on Page Change with ASViewPager V1.18+
    • B4I better perfomance on Expand and Collapse with finger and with the functions
    • BugFixes
  • 2.10 (read more about this update)
    • New Event VisibleRangeChange - is triggered before the new page is completely visible.
    • Add SetLimitRange - Limit the calendar to a certain range of months
      • Set one of them to 0 if you dont want a limit
  • 2.11 (read more about this update)
    • Designer Property "Expanded" a better handling of the view
      • If True the full height is used to display the view expanded
      • IF False the full height is used to display the view collapsed
      • Old Handling:
        • If True the full height is used to display the view collapsed and from the body height the expanded heihgt was calculated
    • Designer Property "BodyItemHeightInPercentage" Removed
      • was a poor indicator of how big the header is
    • Add Desinger Property "HeaderHeight" - Determines the size of the header. The larger the number the less space the items have in the body
    • Add Designer Property "KeepSelectedDate"
    • Add Designer Porperty "BottomHeight" - the height of the drag-panel on the bottom, to expand or collapse the view
    • Add Designer Property "ShowOtherMonths" - Only in MonthView - set it to False if you dont show the days from the next or previous month
    • Add Expand - Expands the view
    • Add Close - Collsaps the view
    • B4J BugFixes
  • 2.12
    • Add set HeaderColor
    • Add set BodyColor - the complete calendar is rebuilt at the action
    • Add set BottomColor
    • Add set OtherMonthBackgroundColor - the complete calendar is rebuilt at the action
  • 2.13
    • BugFix - The event "VisibleRangeChange" was not triggered when creating the calendar
  • 2.14
    • Add AppointmentType1BottomAppointmentTyp2Top - If false then AppointmentType1 is on Top and Type2 is on the bottom
Have Fun :)
Hi i am already make donation

Thanks
 

syerif

Member
Licensed User
Longtime User
how can I change the header text color? it has property but I can not change the color
code:
ASCalendarAdvanced1.HeaderTextProperties.TextColor = Colors.Red
 
Last edited:

Alexander Stolte

Expert
Licensed User
how can I change the header text color? it has property but I can not change the color
B4X:
ASCalendarAdvanced1.HeaderTextProperties.TextColor = Colors.Red
You need to call UpdateHeader if you change header properties
B4X:
ASCalendarAdvanced1.HeaderTextProperties.TextColor = Colors.Red
ASCalendarAdvanced1.UpdateHeader
 

Alexander Stolte

Expert
Licensed User
Update
  • 2.15
    • Add set Limit2Forward - Limit the calendar to the current time period and the future - set it to true before CreateCalendar
    • Add 2 property descriptions for better understanding
Limit2Forward
I don't know what I should have called it better.
It means that you can only get to the time periods in the future or in the present.
 

Alexander Stolte

Expert
Licensed User
Update
  • 2.16
    • Add PastDaysTextColor to BodyTextProperties - The text color for days that lie in the past - standard value is -1 (All days have the same color)
PastDaysTextColor
Example:
ASCalendarAdvanced1.BodyTextProperties.PastDaysTextColor = xui.Color_Red
ASCalendarAdvanced1.UpdateBody
(1) image.png
 

MarcoRome

Expert
Licensed User
Longtime User
Hi @Alexander Stolte congratulations on your library, i think it is one of those libraries that are absolutely necessary to manage a calendar.
I have a suggestion.
When I look at the calendar and I have entered a couple of appointments, for example, you see this situation:

1639112252123.png


But when I select the day, the appointments are no longer displayed, as in the following situation:

1639112276599.png


It would be very convenient, however, to see the appointments while selecting the day, as in the following situation:

1639112312505.png


Thank you 👍 👍
Have a nice day
 

Alexander Stolte

Expert
Licensed User
But when I select the day, the appointments are no longer displayed, as in the following situation:
Yes, this is intentional, because the SelectedDate circle can be larger than the CurrentDate circle. I will introduce a new property (KeepAppointmentsVisibleOnSelect) where you can show this anyway.
It would be very convenient, however, to see the appointments while selecting the day, as in the following situation:
I will take into account with the BugFixing

Thank you 👍 👍
Have a nice day
Thanks you too.
i think it is one of those libraries that are absolutely necessary to manage a calendar.
Thats nice! But has also made me a lot of work and frustration :D
 

MarcoRome

Expert
Licensed User
Longtime User
Hi Alexander I was trying 2.17 on iOS ( B4i ) and I get this error (even when loading the demo).
In B4A everything is ok, selecting only the library.
In B4i No as you see

1639306572820.png
 

MarcoRome

Expert
Licensed User
Longtime User
Hi dear.
I think there is a small bug
If i use the following code:
B4X:
SetDateTimeLocale(GetPreferredLanguage)
DateTime.DateFormat = "EEEE dd MMMM"
Label1.Text = DateTime.Date(DateTime.Now)

Sub SetDateTimeLocale (locale As String)
    Dim loc As NativeObject
    loc = loc.Initialize("NSLocale").RunMethod("localeWithLocaleIdentifier:", Array(locale))
    Dim no As NativeObject = DateTime
    no.GetField("dateFormat").SetField("locale", loc)
    no.GetField("timeFormat").SetField("locale", loc)
End Sub

Sub GetPreferredLanguage As String
    Dim no As NativeObject
    Return no.Initialize("NSLocale").RunMethod("preferredLanguages", Null).RunMethod("objectAtIndex:", Array(0)).AsString
End Sub

displays the date in the local language device in label1. But the calendar returns the following error

Application_Start
VisibleRangeChanged StartDate: 12/20/2021 12:17:24 EndDate: 12/26/2021 12:17:24
Error: Invalid value: AD20211213 000000
Error occurred on line: 1922 (ASCalendarAdvanced)
Cannot parse: invalid date
Stack Trace: (
CoreFoundation B2D21CFD-378C-36D5-BAF7-3F70599CFEFC + 626784
libobjc.A.dylib objc_exception_throw + 60
CoreFoundation B2D21CFD-378C-36D5-BAF7-3F70599CFEFC + 983424
AS CalendarAdvanced Example 0x000000010079daec -[B4I ObjectToNumber:] + 360
AS CalendarAdvanced Example 0x00000001007d9ee0 -[b4i_dateutils _setdateandtime::::::] + 2344
AS CalendarAdvanced Example 0x00000001007d95ac -[b4i_dateutils _setdate:::] + 80
AS CalendarAdvanced Example 0x00000001006cb718 -[b4i_ascalendaradvanced _convertsamedatetimeticks2samedateticks::] + 708
AS CalendarAdvanced Example 0x00000001006c4ff0 -[b4i_ascalendaradvanced _base_resize:::] + 4856
CoreFoundation B2D21CFD-378C-36D5-BAF7-3F70599CFEFC + 140020
CoreFoundation B2D21CFD-378C-36D5-BAF7-3F70599CFEFC + 260804
AS CalendarAdvanced Example 0x000000010079d260 +[B4I runDynamicMethod:method:throwErrorIfMissing:args:] + 1300
AS CalendarAdvanced Example 0x00000001008135cc -[B4IShell runMethod:] + 448
AS CalendarAdvanced Example 0x00000001008122e8 -[B4IShell raiseEventImpl:method:args::] + 2172
AS CalendarAdvanced Example 0x0000000100815a1c -[B4IShellBI raiseEvent:event:params:] + 1580
AS CalendarAdvanced Example 0x0000000100797674 +[B4IObjectWrapper raiseEvent:::] + 268
AS CalendarAdvanced Example 0x00000001007b785c __30-[B4IPanelView layoutSubviews]_block_invoke + 716
libdispatch.dylib A5CBAAB3-E389-3548-BAAC-FAB18411B94A + 10516
libdispatch.dylib A5CBAAB3-E389-3548-BAAC-FAB18411B94A + 18016
libdispatch.dylib _dispatch_main_queue_callback_4CF + 944
CoreFoundation B2D21CFD-378C-36D5-BAF7-3F70599CFEFC + 335060
CoreFoundation B2D21CFD-378C-36D5-BAF7-3F70599CFEFC + 48812
CoreFoundation CFRunLoopRunSpecific + 600
GraphicsServices GSEventRunModal + 164
UIKitCore 8388EB03-002B-3B35-A78A-6A022894292E + 5346984
UIKitCore UIApplicationMain + 2092
AS CalendarAdvanced Example 0x00000001006b177c main + 120
dyld start + 520
)

If, after having displayed the date in the device language in label1, restore the English language with the following code

B4X:
SetDateTimeLocale(GetPreferredLanguage)
DateTime.DateFormat = "EEEE dd MMMM"
Label1.Text = DateTime.Date(DateTime.Now)
SetDateTimeLocale("EN-en") '<---restore English

does not give any error
 

Attachments

  • AS CalendarAdvanced.zip
    173.1 KB · Views: 21

Alexander Stolte

Expert
Licensed User
If you set SetDateTimeLocale(GetPreferredLanguage) before you call CreateCalendar then no error occurs.
But why, i dont know.
This line is affected then:
B4X:
Log(DateUtils.SetDate(DateTime.GetYear(ticks),DateTime.GetMonth(ticks),DateTime.GetDayOfMonth(ticks)))
But this has nothing to do with the view, because if I add this line after I set the locale with your code, then it also crashes outside of the view.
It looks like you have to set "SetDateTimeLocale" directly to app start so that no error occurs.

B4X:
SetDateTimeLocale(GetPreferredLanguage)
Log(DateUtils.SetDate(DateTime.GetYear(DateTime.Now),DateTime.GetMonth(DateTime.Now),DateTime.GetDayOfMonth(DateTime.Now)))'crash outside of the view'
DateTime.DateFormat = "EEEE dd MMMM"
Label1.Text = DateTime.Date(DateTime.Now)
'SetDateTimeLocale("EN-en")
 
Top