From 773fcc423ab0f3827b349a31f53a01a4f489dde5 Mon Sep 17 00:00:00 2001 From: Oscar Vaquero Date: Fri, 13 Nov 2020 19:21:39 +0100 Subject: [PATCH 1/2] Fix the wrong assignation of margins when the text is assigned Remove margins when the badge is not shown --- .../Views/BadgeView/BadgeView.shared.cs | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs b/XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs index b498100e7..37285af13 100644 --- a/XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs +++ b/XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs @@ -119,6 +119,7 @@ static async void OnTextChanged(BindableObject bindable, object oldValue, object { badgeView.UpdateLayout(); await badgeView.UpdateVisibilityAsync(); + badgeView.UpdateBadgeViewPlacement(true); } } @@ -261,45 +262,58 @@ void UpdateBadgeViewPlacement(bool force = false) if (placementDone) return; - const double Padding = 6; + var containerMargin = new Thickness(0); + var contentMargin = new Thickness(0); - var size = Math.Max(BadgeText.Height, BadgeText.Width) + Padding; + if (BadgeIndicatorContainer.IsVisible) + { + const double Padding = 6; + var size = Math.Max(BadgeText.Height, BadgeText.Width) + Padding; + BadgeIndicatorBackground.HeightRequest = size; + var margins = GetMargins(size); + containerMargin = margins.Item1; + contentMargin = margins.Item2; + } - BadgeIndicatorBackground.HeightRequest = size / 1.5; + BadgeIndicatorContainer.Margin = containerMargin; + BadgeContent.Margin = contentMargin; + placementDone = true; + } + Tuple GetMargins(double size) + { double verticalMargin; double horizontalMargin; - + var containerMargin = new Thickness(0); + var contentMargin = new Thickness(0); switch (BadgePosition) { - case BadgePosition.TopLeft: - verticalMargin = size / 2; - horizontalMargin = BadgeContent.Width + verticalMargin; - BadgeIndicatorContainer.Margin = new Thickness(0, 0, horizontalMargin, 0); - BadgeContent.Margin = new Thickness(verticalMargin, verticalMargin, 0, 0); - break; case BadgePosition.TopRight: verticalMargin = size / 2; horizontalMargin = BadgeContent.Width - verticalMargin; - BadgeIndicatorContainer.Margin = new Thickness(horizontalMargin, 0, 0, 0); - BadgeContent.Margin = new Thickness(0, verticalMargin, 0, 0); + containerMargin = new Thickness(horizontalMargin, 0, 0, 0); + contentMargin = new Thickness(0, verticalMargin, verticalMargin, 0); break; - case BadgePosition.BottomLeft: + case BadgePosition.TopLeft: + verticalMargin = size / 2; + containerMargin = new Thickness(0, 0, 0, 0); + contentMargin = new Thickness(verticalMargin, verticalMargin, 0, 0); + break; + case BadgePosition.BottomRight: verticalMargin = size / 2; var bottomLeftverticalMargin = BadgeContent.Height - verticalMargin; - BadgeIndicatorContainer.Margin = new Thickness(0, bottomLeftverticalMargin, 0, 0); + containerMargin = new Thickness(0, bottomLeftverticalMargin, 0, 0); BadgeContent.Margin = new Thickness(verticalMargin, 0, 0, 0); break; - case BadgePosition.BottomRight: + case BadgePosition.BottomLeft: verticalMargin = size / 2; var bottomRightverticalMargin = BadgeContent.Height - verticalMargin; horizontalMargin = BadgeContent.Width - verticalMargin; - BadgeIndicatorContainer.Margin = new Thickness(horizontalMargin, bottomRightverticalMargin, 0, 0); - BadgeContent.Margin = new Thickness(0, 0, 0, verticalMargin); + containerMargin = new Thickness(horizontalMargin, bottomRightverticalMargin, 0, 0); + contentMargin = new Thickness(0, 0, verticalMargin, 0); break; } - - placementDone = true; + return new Tuple(containerMargin, contentMargin); } async Task UpdateVisibilityAsync() From f41fe64726001d6010ca6a82f4ce03dc405df780 Mon Sep 17 00:00:00 2001 From: Oscar Vaquero Date: Sat, 14 Nov 2020 18:08:10 +0100 Subject: [PATCH 2/2] do not remove the margins even if there is no text --- XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs b/XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs index 37285af13..952855ef8 100644 --- a/XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs +++ b/XamarinCommunityToolkit/Views/BadgeView/BadgeView.shared.cs @@ -119,7 +119,6 @@ static async void OnTextChanged(BindableObject bindable, object oldValue, object { badgeView.UpdateLayout(); await badgeView.UpdateVisibilityAsync(); - badgeView.UpdateBadgeViewPlacement(true); } }