Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
                }
            }
        }
Esempio n. 3
0
        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;
                }
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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();
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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));
                }
            }
        }