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