void SetChildLayout(FloatingView child) { var renderer = PlatformUtility.GetOrCreateNativeView(child, Context); var nativeChild = renderer.View; Element.LayoutChild(child); int width = -1; int height = -1; if (child.HorizontalLayoutAlignment != XF.LayoutAlignment.Fill) { width = (int)Context.ToPixels(child.Bounds.Width); } if (child.VerticalLayoutAlignment != XF.LayoutAlignment.Fill) { height = (int)Context.ToPixels(child.Bounds.Height); } using (var param = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent) { Width = width, Height = height, Gravity = GetGravity(child), }) { SetOffsetMargin(param, child); Control.AddView(nativeChild, param); } }
internal void SetOffsetMargin(FrameLayout.LayoutParams layoutParams, FloatingView view) { var offsetX = (int)Context.ToPixels(view.OffsetX); if (view.HorizontalLayoutAlignment == LayoutAlignment.Fill) { offsetX = 0; } var offsetY = (int)Context.ToPixels(view.OffsetY); if (view.VerticalLayoutAlignment == LayoutAlignment.Fill) { offsetY = 0; } // the offset direction is reversed when GravityFlags contains Left or Bottom. if (view.HorizontalLayoutAlignment == XF.LayoutAlignment.End) { layoutParams.RightMargin = offsetX * -1; } else { layoutParams.LeftMargin = offsetX; } if (view.VerticalLayoutAlignment == XF.LayoutAlignment.End) { layoutParams.BottomMargin = offsetY * -1; } else { layoutParams.TopMargin = offsetY; } }
internal GravityFlags GetGravity(FloatingView view) { GravityFlags gravity = GravityFlags.NoGravity; switch (view.VerticalLayoutAlignment) { case XF.LayoutAlignment.Start: gravity |= GravityFlags.Top; break; case XF.LayoutAlignment.End: gravity |= GravityFlags.Bottom; break; case XF.LayoutAlignment.Center: gravity |= GravityFlags.CenterVertical; break; default: gravity |= GravityFlags.FillVertical; break; } switch (view.HorizontalLayoutAlignment) { case XF.LayoutAlignment.Start: gravity |= GravityFlags.Left; break; case XF.LayoutAlignment.End: gravity |= GravityFlags.Right; break; case XF.LayoutAlignment.Center: gravity |= GravityFlags.CenterHorizontal; break; default: gravity |= GravityFlags.FillHorizontal; break; } return(gravity); }
void initComponent() { floatView = new FloatingView(); View.Add(floatView); floatView.Navigate2Reader += FloatView_Navigate2Reader; floatView.Navigate2ReaderStarted += (object sender) => { UIView.Animate(0.35, () => { backgroundImage.Alpha = 0; waitImage.Alpha = 1; }); }; floatView.backCenterImage.Image = UIImage.FromFile("efiles/fondologin.jpg"); UITapGestureRecognizer dologout = new UITapGestureRecognizer(() => { vm.LogoutCommand.Execute(null); }); floatView.doAskButton.AddGestureRecognizer(dologout); }
public FloatingView GetFloatingConfig(SecurityConfig config, string channel, int version) { if (config != null) { if (version >= config.LatestVersion) { return(null); } else { var floatingconfig = dbContextService.Single <FloatingModel>(x => x.Version == config.LatestVersion && x.Status == 1); var floatingView = new FloatingView() { JsonResult = floatingconfig.JsonResult, Version = config.LatestVersion, Rate = config.Rate }; return(floatingView); } } return(null); }
protected override void OnAppearing() { base.OnAppearing(); if (!hasInitialization) { BindingContext = new StatusesViewModel(position); var cancel = new ToolbarItem { Text = "添加", Command = new Command(async() => { if (UserTokenSettings.Current.HasExpiresIn()) { MessagingService.Current.SendMessage(MessageKeys.NavigateLogin); } else { await NavigationService.PushAsync(Navigation, new StatusesEditPage(new Statuses(), new Action <Statuses>(OnResult))); } }), Icon = "toolbar_add.png" }; ToolbarItems.Add(cancel); this.StatusesListView.HasFloatingView = true; this.StatusesListView.ItemSelected += async delegate { var statuses = StatusesListView.SelectedItem as Statuses; this.StatusesListView.SelectedItem = null; if (statuses == null) { return; } var statusesDetails = new StatusesDetailsPage(statuses); if (statuses.Id > 0) { await NavigationService.PushAsync(Navigation, statusesDetails); } }; var floatingView = new FloatingView(); this.StatusesListView.FloatingChanged += delegate(object sender, bool floating) { if (Device.RuntimePlatform == Device.Android) { if (floating) { floatingView.ToggleFloatingView = true; } else { floatingView.ToggleFloatingView = false; } } }; if (Device.RuntimePlatform == Device.Android) { floatingView.Image = "toolbar_add.png"; floatingView.ButtonColor = Color.FromHex("#E64A19"); AbsoluteLayout.SetLayoutBounds(floatingView, new Rectangle(1, .9, 80, 90)); AbsoluteLayout.SetLayoutFlags(floatingView, AbsoluteLayoutFlags.PositionProportional); floatingView.Clicked += async delegate(object sender, EventArgs e) { if (UserTokenSettings.Current.HasExpiresIn()) { MessagingService.Current.SendMessage(MessageKeys.NavigateLogin); } else { await NavigationService.PushAsync(this.Navigation, new StatusesEditPage(new Statuses())); } }; this.AbsoluteLayout.Children.Add(floatingView); } ViewModel.GetClientStatusesAsync(); hasInitialization = true; } UpdatePage(); }
internal static void SetLayoutAlignment(UIView targetView, UIView parentView, FloatingView floating) { targetView.TranslatesAutoresizingMaskIntoConstraints = false; parentView.AddSubview(targetView); if (floating.HorizontalLayoutAlignment != LayoutAlignment.Fill) { targetView.WidthAnchor.ConstraintEqualTo((System.nfloat)floating.Bounds.Width).Active = true; } if (floating.VerticalLayoutAlignment != LayoutAlignment.Fill) { targetView.HeightAnchor.ConstraintEqualTo((System.nfloat)floating.Bounds.Height).Active = true; } switch (floating.VerticalLayoutAlignment) { case Xamarin.Forms.LayoutAlignment.Start: targetView.TopAnchor.ConstraintEqualTo(parentView.TopAnchor, floating.OffsetY).Active = true; break; case Xamarin.Forms.LayoutAlignment.End: targetView.BottomAnchor.ConstraintEqualTo(parentView.BottomAnchor, floating.OffsetY).Active = true; break; case Xamarin.Forms.LayoutAlignment.Center: targetView.CenterYAnchor.ConstraintEqualTo(parentView.CenterYAnchor, floating.OffsetY).Active = true; break; default: targetView.HeightAnchor.ConstraintEqualTo(parentView.HeightAnchor).Active = true; break; } switch (floating.HorizontalLayoutAlignment) { case Xamarin.Forms.LayoutAlignment.Start: targetView.LeftAnchor.ConstraintEqualTo(parentView.LeftAnchor, floating.OffsetX).Active = true; break; case Xamarin.Forms.LayoutAlignment.End: targetView.RightAnchor.ConstraintEqualTo(parentView.RightAnchor, floating.OffsetX).Active = true; break; case Xamarin.Forms.LayoutAlignment.Center: targetView.CenterXAnchor.ConstraintEqualTo(parentView.CenterXAnchor, floating.OffsetX).Active = true; break; default: targetView.WidthAnchor.ConstraintEqualTo(parentView.WidthAnchor).Active = true; break; } }