protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint) { List <string> classes = this.GetValue(ResponsiveProperty.ClassProperty)?.ToString().Split(" ".ToCharArray()).ToList(); Enums.DeviceSize deviceSize = Common.GetCurrentDeviceSize(); SizeRequest sizeRequest = this.ProcessCommonSizeRequest(widthConstraint, heightConstraint); if (classes != null) { if (classes.Any(o => o.Equals($"hidden-{deviceSize.Tag()}"))) { if (this.HeightRequest > 0) { OriginalElementHeight = this.HeightRequest; } sizeRequest = this.ProcessVisibilitySizeRequest(widthConstraint, heightConstraint); } else if (OriginalElementHeight > 0) { this.HeightRequest = OriginalElementHeight; } if (classes.Any(o => o.Equals(Constant.Row)) || classes.Any(o => o.Equals(Constant.FormHorizontal))) { sizeRequest = this.ProcessRowSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.FormBasic))) { sizeRequest = this.ProcessFormBasicSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.ButtonGroup))) { sizeRequest = this.ProcessButtonGroupSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.ButtonGroupJustified))) { sizeRequest = this.ProcessButtonJustifiedSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.FormInLine))) { sizeRequest = this.ProcessFormInlineSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.InputGroup))) { sizeRequest = this.ProcessInputGroupSizeRequest(widthConstraint, heightConstraint); } } return(sizeRequest); }
private void ProcessVisibility(List <string> classes) { if (classes.Any(o => o.StartsWith("hidden-"))) { double width = UIScreen.MainScreen.Bounds.Width; Enums.DeviceSize deviceSize = Common.GetDeviceSize(width); Element.IsVisible = true; if (classes.Any(o => o.Equals($"hidden-{deviceSize.Tag()}"))) { Element.IsVisible = false; } } }
private void ProcessVisibility(List <string> classes) { if (classes.Any(o => o.StartsWith("hidden-"))) { double width = (Resources.DisplayMetrics.WidthPixels) / (Resources.DisplayMetrics.Density); Enums.DeviceSize deviceSize = Common.GetDeviceSize(width); Element.IsVisible = true; if (classes.Any(o => o.Equals($"hidden-{deviceSize.Tag()}"))) { Element.IsVisible = false; } } }
protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint) { List <string> classes = this.GetValue(ResponsiveProperty.ClassProperty)?.ToString().Split(" ".ToCharArray()).ToList(); Enums.DeviceSize deviceSize = Common.GetCurrentDeviceSize(); SizeRequest sizeRequest = new SizeRequest(); if (!double.IsPositiveInfinity(widthConstraint)) { sizeRequest = this.ProcessCommonSizeRequest(widthConstraint, heightConstraint); } if (classes != null && !double.IsPositiveInfinity(widthConstraint)) { if (classes.Any(o => o.Equals(Constant.Row)) || classes.Any(o => o.Equals(Constant.FormHorizontal))) { sizeRequest = this.ProcessRowSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.FormBasic))) { sizeRequest = this.ProcessFormBasicSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.ButtonGroup))) { sizeRequest = this.ProcessButtonGroupSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.ButtonGroupJustified))) { sizeRequest = this.ProcessButtonJustifiedSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.FormInLine))) { sizeRequest = this.ProcessFormInlineSizeRequest(widthConstraint, heightConstraint); } if (classes.Any(o => o.Equals(Constant.InputGroup))) { sizeRequest = this.ProcessInputGroupSizeRequest(widthConstraint, heightConstraint); } } return(sizeRequest); }
private void ResponsiveMasterDetail_SizeChanged(object sender, EventArgs e) { Enums.DeviceSize deviceSize = Common.GetCurrentDeviceSize(); _masterGrid = new Grid() { ColumnSpacing = 0, RowSpacing = 0 }; _detailGrid = new Grid() { ColumnSpacing = 0, RowSpacing = 0 }; _buttonBack = new Button(); if (MasterHeader == null) { _masterHeader = new Grid(); _masterHeader.Padding = new Thickness(8); _masterHeader.Children.Add(new Label { Text = Title, HorizontalOptions = LayoutOptions.Center, FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)), VerticalOptions = LayoutOptions.Center }); _masterHeader.BackgroundColor = Color.Silver; } else { _masterHeader = MasterHeader as Layout <View>; if (_masterHeader.BackgroundColor.Equals(Color.Default)) { _masterHeader.BackgroundColor = Color.Silver; } } if (deviceSize.Equals(Enums.DeviceSize.Medium) || deviceSize.Equals(Enums.DeviceSize.Large) || deviceSize.Equals(Enums.DeviceSize.ExtraLarge)) { LayoutMedium(); } else if (deviceSize.Equals(Enums.DeviceSize.Small)) { LayoutSmall(); } else if (deviceSize.Equals(Enums.DeviceSize.ExtraSmall)) { LayoutExtraSmall(); } LayoutCommon(); }
private static int GetColumnSizeByDeviceSize(View element, Enums.DeviceSize deviceSize) { var property = element.GetValue(ResponsiveProperty.ClassProperty); int value = -1; if (property != null) { List <string> classes = property.ToString().Split(" ".ToCharArray()).ToList(); string columnStartString = $"col-{deviceSize.Tag()}-"; if (classes.Any(o => o.StartsWith(columnStartString) && !o.Contains("offset"))) { value = Convert.ToInt16(classes.Where(o => o.StartsWith(columnStartString) && !o.Contains("offset")).First().TrimStart(columnStartString.ToCharArray())); } } return(value); }
private static void OnIsDetailVisibleChanged(BindableObject bindable, object oldValue, object newValue) { var item = (ResponsiveMasterDetail)bindable; if (newValue == oldValue) { return; } bool newVal = Convert.ToBoolean(newValue); Enums.DeviceSize deviceSize = Common.GetCurrentDeviceSize(); if (deviceSize.Equals(Enums.DeviceSize.Small)) { if (!newVal) { item._buttonBack.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(item._masterGrid.Width, 0, item._buttonBack.Width, item._buttonBack.Height)); item._masterGrid.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(0, 0, item._masterGrid.Width, 1)); } else { item._buttonBack.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(0, 0, item._buttonBack.Width, item._buttonBack.Height)); item._masterGrid.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(-item._masterGrid.Width, 0, item._masterGrid.Width, 1)); } } else if (deviceSize.Equals(Enums.DeviceSize.ExtraSmall)) { if (newVal) { item._masterGrid.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(-item._masterGrid.Width, 0, 1, 1)); } else { item._masterGrid.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(0, 0, 1, 1)); } } }
private void ResponsiveMasterDetail_SizeChanged(object sender, EventArgs e) { Enums.DeviceSize deviceSize = Common.GetCurrentDeviceSize(); if (_lastDeviceSize != deviceSize) { if (IsMasterVisible) { IsMasterVisible = false; } _lastDeviceSize = deviceSize; this.SizeChanged -= ResponsiveMasterDetail_SizeChanged; try { if (MasterHeader == null) { // _masterGridHeader = new Grid() { ColumnSpacing = 0, RowSpacing = 0, BackgroundColor = Color.White, Padding = new Thickness(8), Margin = new Thickness(1) }; _masterGridHeader = new Label { Text = Title, TextColor = Color.Black, HorizontalOptions = LayoutOptions.Center, FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)), VerticalOptions = LayoutOptions.Center }; } else { _masterGridHeader = MasterHeader as VisualElement; if (_masterGridHeader.BackgroundColor.Equals(Color.Default)) { _masterGridHeader.BackgroundColor = Color.White; } //if (_masterGridHeader.Margin == new Thickness(0)) // _masterGridHeader.Margin = new Thickness(1); } //_masterGrid.Children.Remove(_masterGridHeader as View); //if (MasterContent != null) // _masterGrid.Children.Remove(MasterContent as View); //if (DetailHeader != null) // _detailGrid.Children.Remove(DetailHeader as View); //if (DetailContent != null) //{ // if (DetailContent is Page) // _detailGrid.Children.Remove(_container); // else // _detailGrid.Children.Remove(DetailContent as View); //} if (ShowDetailHeader) { try { if (_detailGrid.RowDefinitions.Count != 3) { _detailGrid.RowDefinitions.Clear(); _detailGrid.RowDefinitions.Add(new RowDefinition { Height = 42 }); _detailGrid.RowDefinitions.Add(new RowDefinition { Height = 1 }); _detailGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Star }); } Grid.SetRow(_horizontalLineDetail, 1); _horizontalLineDetail.IsVisible = true; if (!_detailGrid.Children.Any(o => o.Equals(_horizontalLineDetail))) { _detailGrid.Children.Add(_horizontalLineDetail); } } catch (Exception ex) { throw; } } if (deviceSize.Equals(Enums.DeviceSize.Medium) || deviceSize.Equals(Enums.DeviceSize.Large) || deviceSize.Equals(Enums.DeviceSize.ExtraLarge)) { LayoutMedium(); } else if (deviceSize.Equals(Enums.DeviceSize.Small)) { LayoutSmall(); } else if (deviceSize.Equals(Enums.DeviceSize.ExtraSmall)) { LayoutExtraSmall(); } LayoutCommon(); } finally { this.SizeChanged += ResponsiveMasterDetail_SizeChanged; } } }
private static void OnIsMasterVisibleChanged(BindableObject bindable, object oldValue, object newValue) { var item = (ResponsiveMasterDetail)bindable; if (newValue == oldValue) { return; } bool newVal = Convert.ToBoolean(newValue); Enums.DeviceSize deviceSize = Common.GetCurrentDeviceSize(); if (item.CollapsableInMedium && (deviceSize.Equals(Enums.DeviceSize.Medium) || deviceSize.Equals(Enums.DeviceSize.Large) || deviceSize.Equals(Enums.DeviceSize.ExtraLarge))) { if (newVal) { item._masterGrid.WidthRequest = item.MasterWidth; } else { item._masterGrid.WidthRequest = item.CollapsedMediumMasterWidth; } item.ArrangeMediumContent(); } else if (deviceSize.Equals(Enums.DeviceSize.Small)) { if (newVal) { if (item._buttonBack != null) { item._buttonBack.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(item._masterGrid.Width, 0, item._buttonBack.Width, item._buttonBack.Height)); } item._masterGrid.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(0, 0, item._masterGrid.Width, 1)); item._overLay.IsVisible = true; } else { if (item._buttonBack != null) { item._buttonBack.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(0, 0, item._buttonBack.Width, item._buttonBack.Height)); } item._masterGrid.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(-item._masterGrid.Width, 0, item._masterGrid.Width, 1)); item._overLay.IsVisible = false; } } else if (deviceSize.Equals(Enums.DeviceSize.ExtraSmall)) { if (!newVal) { if (item._buttonBack != null) { item._buttonBack.IsVisible = true; } item._masterGrid.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(-item._masterGrid.Width, 0, 1, 1)); } else { if (item._buttonBack != null) { item._buttonBack.IsVisible = false; } item._masterGrid.SetValue(AbsoluteLayout.LayoutBoundsProperty, new Rectangle(0, 0, 1, 1)); } } }