diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj b/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj
index d2c42fc..3f6589d 100644
--- a/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj
+++ b/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj
@@ -16,7 +16,7 @@
Resources
Assets
false
- v8.1
+ v9.0
true
Xamarin.Android.Net.AndroidClientHandler
@@ -31,6 +31,9 @@
prompt
4
None
+ false
+ false
+ false
true
@@ -52,6 +55,12 @@
+
+ 2.4.5.909-pre
+
+
+ 2.4.5.909-pre
+
@@ -64,7 +73,9 @@
+
+
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Helpers/ConversionHelpers.cs b/CollectionViewChallenge/CollectionViewChallenge.Android/Helpers/ConversionHelpers.cs
new file mode 100644
index 0000000..1e9248d
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge.Android/Helpers/ConversionHelpers.cs
@@ -0,0 +1,14 @@
+using Android.App;
+
+namespace CollectionViewChallenge.Droid.Helpers
+{
+ public static class ConversionHelper
+ {
+ public static int ConvertDPToPixels(int dp)
+ {
+ float scale = Application.Context.Resources.DisplayMetrics.Density;
+
+ return (int)(dp * scale + 0.5);
+ }
+ }
+}
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/MainActivity.cs b/CollectionViewChallenge/CollectionViewChallenge.Android/MainActivity.cs
index 72e1935..6ec1f5e 100644
--- a/CollectionViewChallenge/CollectionViewChallenge.Android/MainActivity.cs
+++ b/CollectionViewChallenge/CollectionViewChallenge.Android/MainActivity.cs
@@ -1,11 +1,8 @@
-using System;
-
-using Android.App;
+using Android.App;
using Android.Content.PM;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
using Android.OS;
+using Android.Runtime;
+using FFImageLoading.Forms.Platform;
namespace CollectionViewChallenge.Droid
{
@@ -22,8 +19,12 @@ protected override void OnCreate(Bundle savedInstanceState)
global::Xamarin.Forms.Forms.SetFlags("Shell_Experimental", "Visual_Experimental", "CollectionView_Experimental", "FastRenderers_Experimental");
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
+
LoadApplication(new App());
+
+ CachedImageRenderer.Init(false);
}
+
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml b/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml
index 8a8223a..e2341b5 100644
--- a/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml
+++ b/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
-
+
-
-
-
+
+
+
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Renderers/LabelControlRenderer.cs b/CollectionViewChallenge/CollectionViewChallenge.Android/Renderers/LabelControlRenderer.cs
new file mode 100644
index 0000000..3fe9821
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge.Android/Renderers/LabelControlRenderer.cs
@@ -0,0 +1,84 @@
+using Android.Content;
+using Android.Graphics.Drawables;
+using CollectionViewChallenge.Controls;
+using CollectionViewChallenge.Droid.Helpers;
+using CollectionViewChallenge.Droid.Renderers;
+using System.ComponentModel;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.Android;
+
+[assembly: ExportRenderer(typeof(LabelControl), typeof(LabelControlRenderer))]
+
+namespace CollectionViewChallenge.Droid.Renderers
+{
+ public class LabelControlRenderer : LabelRenderer
+ {
+ private GradientDrawable m_background;
+
+ public LabelControlRenderer(Context context)
+ : base(context)
+ {
+ m_background = new GradientDrawable();
+ m_background.SetShape(ShapeType.Rectangle);
+ }
+
+ protected override void OnElementChanged(ElementChangedEventArgs
+
+
@@ -133,6 +135,12 @@
+
+ 2.4.5.909-pre
+
+
+ 2.4.5.909-pre
+
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Controls/UILabelControl.cs b/CollectionViewChallenge/CollectionViewChallenge.iOS/Controls/UILabelControl.cs
new file mode 100644
index 0000000..33645ee
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge.iOS/Controls/UILabelControl.cs
@@ -0,0 +1,38 @@
+using CoreGraphics;
+using System;
+using UIKit;
+
+namespace CollectionViewChallenge.iOS.Controls
+{
+ ///
+ /// Custom iOS UILabel that allows padding of content
+ ///
+ internal class UILabelControl : UILabel
+ {
+ private UIEdgeInsets m_padding = UIEdgeInsets.Zero;
+ public UIEdgeInsets Padding
+ {
+ get { return m_padding; }
+ set
+ {
+ m_padding = value;
+ InvalidateIntrinsicContentSize();
+ }
+ }
+
+ public override CGRect TextRectForBounds(CGRect bounds, nint numberOfLines)
+ {
+ CGRect rect = base.TextRectForBounds(Padding.InsetRect(bounds), numberOfLines);
+
+ return new CGRect(rect.X - Padding.Left,
+ rect.Y - Padding.Top,
+ rect.Width + Padding.Left + Padding.Right,
+ rect.Height + Padding.Top + Padding.Bottom);
+ }
+
+ public override void DrawText(CGRect rect)
+ {
+ base.DrawText(Padding.InsetRect(rect));
+ }
+ }
+}
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Renderers/LabelControlRenderer.cs b/CollectionViewChallenge/CollectionViewChallenge.iOS/Renderers/LabelControlRenderer.cs
new file mode 100644
index 0000000..f654c77
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge.iOS/Renderers/LabelControlRenderer.cs
@@ -0,0 +1,94 @@
+using CollectionViewChallenge.Controls;
+using CollectionViewChallenge.iOS.Controls;
+using CollectionViewChallenge.iOS.Renderers;
+using System;
+using System.ComponentModel;
+using UIKit;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.iOS;
+
+[assembly: ExportRenderer(typeof(LabelControl), typeof(LabelControlRenderer))]
+
+namespace CollectionViewChallenge.iOS.Renderers
+{
+ public class LabelControlRenderer : LabelRenderer
+ {
+ private UIEdgeInsets m_padding;
+
+ public LabelControlRenderer()
+ {
+ m_padding = new UIEdgeInsets();
+ }
+
+ protected override void OnElementChanged(ElementChangedEventArgs