6 Answers, 1 is accepted
The controls in UI for Xamarin rely on our native suites -- UI for Android and UI for iOS.
- UI for Android supports all versions back to API Level 9 (Android 2.3 Gingerbread) as described here.
- UI for iOS supports iOS 7 and higher as described here
Still, the Xamarin Forms framework imposes higher requirement for Android version -- 4.0.3 (API15) and higher , as described on their requirements page. So you should not experience issues on Android 4.4.2. Can you please provide us with a sample, reproducing the issue, so that we can investigate it?
Best regards,
Ves
Telerik

Unfortunately the phone with 4.4.2 belongs to a user and is not available for testing, but here's the stacktrace and I've attached the calendar code (only Telerik control we're using right now).
Java.Lang.ClassNotFoundException: Didn't find class "android.util.Size" on path: DexPathList[[zip file "/data/app/<app>.apk"],nativeLibraryDirectories=[/data/app-lib/<app>, /vendor/lib, /system/lib]] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <filename unknown>:0 at Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue* parms) [0x0006a] in <filename unknown>:0 at Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x0001d] in <filename unknown>:0 at Android.Runtime.JNIEnv.FindClass (System.String classname) [0x00024] in <filename unknown>:0 at Android.Runtime.JNIEnv.FindClass (System.String className, System.IntPtr& cachedJniClassHandle) [0x00014] in <filename unknown>:0 at Android.Util.Size.get_class_ref () [0x00000] in <filename unknown>:0 at Android.Util.Size..ctor (Int32 width, Int32 height) [0x000a8] in <filename unknown>:0 at Telerik.XamarinForms.Common.Android.AndroidTypeConversionExtensions.ToAndroidSize (Size size, Boolean toPixels) [0x0003c] in <filename unknown>:0 at Telerik.XamarinForms.InputRenderer.Android.AndroidEventRenderer.SetStyleProperties (Telerik.XamarinForms.Input.CalendarAppointmentsStyle style) [0x0022d] in <filename unknown>:0 at Telerik.XamarinForms.InputRenderer.Android.AndroidEventRenderer..ctor (Telerik.XamarinForms.Input.CalendarAppointmentsStyle style, Android.Content.Context context) [0x001b2] in <filename unknown>:0 at Telerik.XamarinForms.InputRenderer.Android.CalendarRenderer.CreateEventRenderer (Com.Telerik.Widget.Calendar.RadCalendarView calendar) [0x00011] in <filename unknown>:0 at Telerik.XamarinForms.InputRenderer.Android.CalendarRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs`1 e) [0x000bb] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (Xamarin.Forms.Platform.Android.TElement element) [0x000fc] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, Boolean sameChildren) [0x00023] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x0010d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x0000d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (Xamarin.Forms.Platform.Android.TElement element) [0x00118] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, Boolean sameChildren) [0x00023] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x0010d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x0000d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (Xamarin.Forms.Platform.Android.TElement element) [0x00118] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, Boolean sameChildren) [0x00023] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x0010d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x0000d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (Xamarin.Forms.Platform.Android.TElement element) [0x00118] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, Boolean sameChildren) [0x00023] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x0010d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x0000d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (Xamarin.Forms.Platform.Android.TElement element) [0x00118] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, Boolean sameChildren) [0x00023] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x0010d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x0000d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (Xamarin.Forms.Platform.Android.TElement element) [0x00118] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.ScrollViewContainer.set_ChildView (Xamarin.Forms.View value) [0x0002f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.ScrollViewRenderer.LoadContent () [0x00011] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.ScrollViewRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x000a5] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, Boolean sameChildren) [0x00023] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x0010d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x0000d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (Xamarin.Forms.Platform.Android.TElement element) [0x00118] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, Boolean sameChildren) [0x00023] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x0010d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x0000d] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (Xamarin.Forms.Platform.Android.TElement element) [0x00118] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.NavigationRenderer.SwitchContentAsync (Xamarin.Forms.Page view, Boolean animated, Boolean removed) [0x00028] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.NavigationRenderer.OnPopToRootAsync (Xamarin.Forms.Page page, Boolean animated) [0x00000] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.NavigationRenderer.PopToRootAsync (Xamarin.Forms.Page page, Boolean animated) [0x00000] in <filename unknown>:0 at Xamarin.Forms.Platform.Android.NavigationRenderer.OnPoppedToRoot (System.Object sender, Xamarin.Forms.NavigationRequestedEventArgs e) [0x0000e] in <filename unknown>:0 at Xamarin.Forms.NavigationPage+<PopToRootAsyncInner>d__72.MoveNext () [0x000c4] in <filename unknown>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <filename unknown>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <filename unknown>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <filename unknown>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <filename unknown>:0 at System.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00000] in <filename unknown>:0 at Xamarin.Forms.NavigationPage+<PopToRootAsync>d__44.MoveNext () [0x001b0] in <filename unknown>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <filename unknown>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <filename unknown>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <filename unknown>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <filename unknown>:0 at System.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00000] in <filename unknown>:0 at <app>.AppPreviewViewModel+<GotoMainApp>d__43.MoveNext () [0x000a3] in <filename unknown>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <filename unknown>:0 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (System.Object state) [0x00000] in <filename unknown>:0 at Android.App.SyncContext+<Post>c__AnonStorey0.<>m__0 () [0x00000] in <filename unknown>:0 at Java.Lang.Thread+RunnableImplementor.Run () [0x0000b] in <filename unknown>:0 at Java.Lang.IRunnableInvoker.n_Run (IntPtr jnienv, IntPtr native__this) [0x00009] in <filename unknown>:0 at (wrapper dynamic-method) System.Object:e0313bb0-13fc-47d0-ae2a-ca13a9969c68 (intptr,intptr)
public partial class HistoryMainView : ContentView
{
private RadCalendar _cal;
public HistoryMainView()
{
InitializeComponent();
_cal = new RadCalendar();
_cal.SetBinding(RadCalendar.AppointmentsSourceProperty, new Binding("CalendarEvents"));
_cal.SetBinding(RadCalendar.SelectedDateProperty, new Binding("SelectedDate", BindingMode.TwoWay));
_cal.GridLinesDisplayMode = DisplayMode.Show;
_cal.GridLinesColor = Color.White;
_cal.GridLinesWidth = 1.0;
_cal.DayNamesDisplayMode = DisplayMode.Show;
Device.OnPlatform(
iOS: () =>
{
_cal.SetStyleForCell = PickCellStyleiOS;
},
Android: () =>
{
_cal.SetStyleForCell = PickCellStyleAndroid;
});
_cal.AppointmentsStyle = new CalendarAppointmentsStyle
{
DisplayMode = AppointmentDisplayMode.Shape,
Padding = new Thickness(5, 25, 5, 5),
MaxCount = 5,
Spacing = 1,
ShapesHorizontalLocation = HorizontalLocation.Right,
ShapesVerticalLocation = VerticalLocation.Bottom,
ShapesOrientation = Orientation.Vertical,
ShapeSize = new Size(12, 12),
ShapeType = CalendarAppointmentShapeType.Ellipse,
AllDayShapesDisplayMode = AllDayDisplayMode.Indicator,
AllDayIndicatorLocation = Location.Top,
AllDayIndicatorPadding = new Thickness(5, 2),
AllDayIndicatorWidth = 2,
};
_cal.NativeControlLoaded += Cal_NativeControlLoaded;
_cal.DisplayDateChanged += (sender, args) => Debug.WriteLine("Display Date Changed " + args.NewValue);
_cal.SelectionChanged += (sender, args) => Debug.WriteLine("Selection Changed " + args.NewValue);
Content = _cal;
}
private CalendarCellStyle PickCellStyleAndroid(CalendarCell cell)
{
//if it contains the year it's a header
if (!string.IsNullOrEmpty(cell.Text) && cell.Text.Contains("201"))
return new CalendarCellStyle {BackgroundColor = Color.White, FontSize = 55, ForegroundColor = Color.Black, FontWeight = FontWeight.Bold};
//if type is Date it's a day cell
if (cell.Type == CalendarCellType.Date)
return new CalendarCellStyle { BackgroundColor = Color.Black, ForegroundColor = Color.White, FontSize = 40 };
//otherwise it's a day name cell
else return new CalendarCellStyle { BackgroundColor = Color.Black, ForegroundColor = Color.White, FontSize = 25 };
}
private CalendarCellStyle PickCellStyleiOS(CalendarCell cell)
{
//if it contains the year it's a header
//if (!string.IsNullOrEmpty(cell.Text) && cell.Text.Contains("201"))
//return new CalendarCellStyle { BackgroundColor = Color.White, FontSize = 35, ForegroundColor = Color.Black, FontWeight = FontWeight.Bold };
//if type is Date it's a day cell
if (cell.Type == CalendarCellType.Date)
return new CalendarCellStyle { BackgroundColor = Color.Black, ForegroundColor = Color.White, FontSize = 20 };
//otherwise it's a day name cell
else return new CalendarCellStyle { BackgroundColor = Color.Black, ForegroundColor = Color.White, FontSize = 15 };
}
private void Cal_NativeControlLoaded(object sender, EventArgs e)
{
//can't be done earlier or it has no effect
//for the moment leave it at default month view
//_cal.TryNavigateToUpperView();
}
}
Thank you for the additional details. We were able to reproduce the problem. The fix is scheduled for our next build, expected to be out by the end of next week.
I have updated your Telerik points.
Best regards,
Ves
Telerik

Thanks, we updated the Telerik component and the app can now be run on Android 4.4.2. However, we've run into another crash situation on 4.4.2 when events are added to the calendar.
Stacktrace:
Xamarin caused by: java.lang.NoSuchMethodError: no method with name='drawOval' signature='(FFFFLandroid/graphics/Paint;)V' in class Landroid/graphics/Canvas; at md56b67504374a0e3ff5529e08e4fa53d9b.AndroidEventRenderer.n_renderEvents(Native Method) at md56b67504374a0e3ff5529e08e4fa53d9b.AndroidEventRenderer.renderEvents(AndroidEventRenderer.java:28) at com.telerik.widget.calendar.CalendarDayCell.drawEvents(CalendarDayCell.java:376) at com.telerik.widget.calendar.CalendarDayCell.render(CalendarDayCell.java:253) at com.telerik.widget.calendar.CalendarRow.render(CalendarRow.java:103) at com.telerik.widget.calendar.CalendarFragment.drawRows(CalendarFragment.java:518) at com.telerik.widget.calendar.CalendarFragment.render(CalendarFragment.java:243) at com.telerik.widget.calendar.CalendarScrollManager$FragmentHolder$LayerView.onDraw(CalendarScrollManager.java:134) at android.view.View.draw(View.java:14692) at android.view.View.getDisplayList(View.java:13573) at android.view.View.getDisplayList(View.java:13627) at android.view.View.draw(View.java:14409) at android.view.ViewGroup.drawChild(ViewGroup.java:3121) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2947) at android.view.View.getDisplayList(View.java:13568) at android.view.View.getDisplayList(View.java:13627) at android.view.View.draw(View.java:14409) at android.view.ViewGroup.drawChild(ViewGroup.java:3121) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2947) at android.view.View.getDisplayList(View.java:13568) at android.view.View.getDisplayList(View.java:13627) at android.view.View.draw(View.java:14409) at android.view.ViewGroup.drawChild(ViewGroup.java:3121)...etc.
Thank you for writing back. We were able to reproduce the problem. The fix will be available with our next official release in mid-September. It will also be included in our beta, expected by the end of August. As a temporary workaround, please do not use Ellipse shape type.
I have updated your Telerik points.
Best regards,
Ves
Telerik by Progress
