This is a migrated thread and some comments may be shown as answers.

Calendar with dark theme

6 Answers 203 Views
Calendar & Scheduling
This is a migrated thread and some comments may be shown as answers.
Yodo
Top achievements
Rank 1
Yodo asked on 29 Sep 2017, 06:52 AM

I use light and dark themes in my app(android + xamarin form). Calendar supported only light theme.

I try use :

      Calendar.SetStyleForCell = EvaluateCellStyle;

      ....
      private CalendarCellStyle EvaluateCellStyle(CalendarCell cell)

      { 

           if(DarkTheme)

               return this.Calendar.DarkStyle;

          else

              return null;

      }

But then my page is loaded for 5 seconds longer.
Maybe there is another way? 

6 Answers, 1 is accepted

Sort by
0
Namysław
Top achievements
Rank 1
answered on 29 Sep 2017, 07:57 AM
Same for me - I'm using Telerik **RadCalendar** together with **Rg.Plugins.Popup**, in order to provide "day chooser" for app users, and against Android, whole popup initialization tooks around **2-3 seconds** (long, but let say more or less acceptable).

However when I'm trying to customize calendar cells styles, it tooks up to even 6-8 seconds, which is way to long.

Below example of my cells styles customization - look especially at **Calendar.SetStyleForCell = SetStyleForCell;**

public partial class CalendarPopupView : PopupPage // Rg.Plugins.Popup.Pages.PopupPage 
{
    private Color _themeColor;
    private Color _fontLightColor;
    private Color _lightAccentColor;
    private Color _darkAccentColor;
    private Color _accentColor;
    private Color _veryLightAccentColor;
 
    private Thickness _borderThickness;
 
    private double _fontVerySmall;
 
    public CalendarPopupView()
    {
        InitializeComponent();
 
        InitializeStyles();
 
        Calendar.SetStyleForCell = SetStyleForCell;
    }
 
    private void InitializeStyles()
    {
        _themeColor = (Color)Application.Current.Resources[nameof(GenericStorage.ThemeColor)]; // any color could be used
        _fontLightColor = (Color)Application.Current.Resources[nameof(GenericStorage.FontLightColor)]; // any color could be used
        _lightAccentColor = (Color)Application.Current.Resources[nameof(GenericStorage.LightAccentColor)]; // any color could be used
        _darkAccentColor = (Color)Application.Current.Resources[nameof(GenericStorage.DarkAccentColor)]; // any color could be used
        _accentColor = (Color)Application.Current.Resources[nameof(GenericStorage.AccentColor)]; // any color could be used
        _veryLightAccentColor = (Color)Application.Current.Resources[nameof(GenericStorage.VeryLightAccentColor)]; // any color could be used
 
        _borderThickness = new Thickness(1);
 
        _fontVerySmall = (double)Application.Current.Resources["FontVerySmall"]; // any font size could be used
    }
 
    private CalendarCellStyle SetStyleForCell(CalendarCell calendarCell)
    {
        var calendarDayCell = calendarCell as CalendarDayCell;
        var calendarTextCell = calendarCell as CalendarTextCell;
 
        if (calendarDayCell != null)
        {
            // CURRENT MOTH
            if (calendarDayCell.IsFromCurrentMonth)
            {
                // Selected day style
                if (calendarDayCell.IsSelected)
                {
                    return new CalendarCellStyle
                    {
                        BackgroundColor = _themeColor,
                        TextColor = _fontLightColor,
                        FontSize = _fontVerySmall,
                        BorderColor = _lightAccentColor,
                        FontAttributes = calendarDayCell.IsToday ? FontAttributes.Bold : FontAttributes.None,
                        BorderThickness = _borderThickness
                    };
                }
 
                // Enabled day style for current month
                if (calendarDayCell.IsEnabled)
                {
                    return new CalendarCellStyle
                    {
                        BackgroundColor = _fontLightColor,
                        TextColor = _darkAccentColor,
                        FontSize = _fontVerySmall,
                        BorderColor = _lightAccentColor,
                        FontAttributes = calendarDayCell.IsToday ? FontAttributes.Bold : FontAttributes.None,
                        BorderThickness = _borderThickness
                    };
                }
 
                // Disabled day style for current month
                return new CalendarCellStyle
                {
                    BackgroundColor = _fontLightColor,
                    TextColor = _accentColor,
                    FontSize = _fontVerySmall,
                    BorderColor = _lightAccentColor,
                    FontAttributes = calendarDayCell.IsToday ? FontAttributes.Bold : FontAttributes.None,
                    BorderThickness = _borderThickness
                };
            }
            // PREVIOUS/NEXT MONTH
            else
            {
                return new CalendarCellStyle
                {
                    BackgroundColor = _veryLightAccentColor,
                    TextColor = _accentColor,
                    FontSize = _fontVerySmall,
                    BorderColor = _lightAccentColor,
                    FontAttributes = calendarDayCell.IsToday ? FontAttributes.Bold : FontAttributes.None,
                    BorderThickness = _borderThickness
                };
            }
        }
 
        if (calendarTextCell != null)
        {
            return new CalendarCellStyle
            {
                BackgroundColor = _fontLightColor,
                TextColor = _accentColor,
                FontSize = _fontVerySmall,
                BorderColor = _lightAccentColor,
                FontAttributes = FontAttributes.None,
                BorderThickness = _borderThickness
            };
        }
 
        return new CalendarCellStyle
        {
            BackgroundColor = _fontLightColor,
            TextColor = _accentColor,
            FontSize = _fontVerySmall,
            BorderColor = _lightAccentColor,
            FontAttributes = FontAttributes.None,
            BorderThickness = _borderThickness
        };
    }
}
0
Yodo
Top achievements
Rank 1
answered on 02 Oct 2017, 09:22 AM
I use customization rules. It works faster. See this link - http://docs.telerik.com/devtools/xamarin/nativecontrols/android/calendar/calendar-customizations
0
Namysław
Top achievements
Rank 1
answered on 03 Oct 2017, 06:38 AM
[quote]Yodo said:I use customization rules. It works faster. See this link - http://docs.telerik.com/devtools/xamarin/nativecontrols/android/calendar/calendar-customizations[/quote]
But it requires platform specific code implementation.
0
Stefan Nenchev
Telerik team
answered on 03 Oct 2017, 11:03 AM
Hi, 

You can try applying the modifications through the newly introduced theming mechanism - You can Set a Theme for the Calendar control and eventually modify the resources that are used. I have attached a sample for your reference. Can you try this approach in your actual setups and update the thread whether it has improved the loading time?

Regards,
Stefan Nenchev
Progress Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
0
Yodo
Top achievements
Rank 1
answered on 05 Oct 2017, 07:26 PM

Thanks for your reply. Customization rules work for me. I don't want use "Xamarin.Forms.Theme..". My work project is not build with this package. I think this package is not updated(the last update was 04/05/2016).

 

0
Lance | Manager Technical Support
Telerik team
answered on 06 Oct 2017, 04:06 PM
Hi Yodo,

I do not see any trials or purchases for UI for Xamarin on your account. I assume you're using your work's license. 

If that is the case, please ask them to assign you as the Licensed User as this is the policy for Telerik product licensing (1 license per developer). It only takes about 20-30 seconds to assign you as the user on the Manage Licensed Users page (the company will still own the product and can change Licensed User at any time).

Here are the steps:

1 - Go to the Manage Licensed Users page
2 - Remove the company as the current Licensed User (they still retain ownership)
3 - Add you as a Licensed User using your email address.

This will allow you to get the latest update from the Telerik NuGet server directly, the instructions to connect are here. Alternatively, you can download non-package based installer here and use the DLLs directly.

Side Note: Being the Licensed User not only allows for you to update to the latest release, but you'll also get the support license and can submit support tickets instead of forum posts. We do actively monitor the forums, but our response time is limited by available resources. A support Ticket carries a guaranteed response time.

Let us know if you have any further questions or concerns.

Regards,
Lance | Tech Support Engineer, Sr.
Progress Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
Tags
Calendar & Scheduling
Asked by
Yodo
Top achievements
Rank 1
Answers by
Namysław
Top achievements
Rank 1
Yodo
Top achievements
Rank 1
Stefan Nenchev
Telerik team
Lance | Manager Technical Support
Telerik team
Share this question
or