/// <summary> /// 此方法在视图View已经创建后返回的,此时view 还没有添加到父级中。 /// 构造View后,计算view的大小,并且调用View的layout方法,完成布局 /// </summary> /// <param name="view"></param> /// <param name="savedInstanceState"></param> public override void OnViewCreated(View view, Bundle savedInstanceState) { base.OnViewCreated(view, savedInstanceState); var size = _contentView.Measure(WindowSize.X / Density, WindowSize.Y / Density).Request; _contentView.Layout(new Xamarin.Forms.Rectangle(0, 0, size.Width, size.Height)); _dialogViewSize = new Size((int)Math.Ceiling(size.Width * Density) , (int)Math.Ceiling(size.Height * Density)); }
// Code taken from // http://www.michaelridland.com/xamarin/creating-native-view-xamarin-forms-viewpage/ public static ViewGroup ConvertFormsToNative(Xamarin.Forms.View view, Xamarin.Forms.Rectangle size) { var renderer = Platform.CreateRenderer(view); var viewGroup = renderer.ViewGroup; renderer.Tracker.UpdateLayout(); var layoutParams = new ViewGroup.LayoutParams((int)size.Width, (int)size.Height); viewGroup.LayoutParameters = layoutParams; view.Layout(size); viewGroup.Layout(0, 0, (int)view.WidthRequest, (int)view.HeightRequest); return(viewGroup); }
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (_dialogElement != null) { _dialogElement.OnCreated(_iDialogMsg); } var size = new Xamarin.Forms.Size(); var droidView = _xfView.ConvertFormsToNative(_mContext); _dialogSize = SetDialogSize(ref size); _xfView.Layout(new Xamarin.Forms.Rectangle(Xamarin.Forms.Point.Zero, size)); return(droidView); }
private View ConvertFormsToNative(Xamarin.Forms.View view, Xamarin.Forms.Rectangle size) { viewRenderer = Platform.CreateRendererWithContext(view, Context); var viewGroup = viewRenderer.View; viewRenderer.Tracker.UpdateLayout(); if (view.HeightRequest > 0) { size.Height = view.HeightRequest; } var layoutParams = new ViewGroup.LayoutParams((int)(size.Width * Xamarin.Essentials.DeviceDisplay.MainDisplayInfo.Density), (int)(size.Height * Xamarin.Essentials.DeviceDisplay.MainDisplayInfo.Density)); viewGroup.LayoutParameters = layoutParams; view.Layout(size); viewGroup.Layout(0, 0, (int)view.Width, (int)view.Height); return(viewGroup); }
protected virtual void SetViewAndText(Toast toast) { if (_toastView != null) { //设定文本 var dialogEle = _toastView as IDialogElement; dialogEle?.OnCreated(_dialogMsg); var droidView = _toastView.ConvertFormsToNative(_mContext); var winWidth = WindowSize.X / Density; var winHeight = WindowSize.Y / Density; _toastViewSize = _toastView.Measure(winWidth, winHeight).Request; _toastView.Layout(new Xamarin.Forms.Rectangle(0, 0, _toastViewSize.Width, _toastViewSize.Height)); var lastView = WrapperViewAndControlSize(droidView); toast.View = lastView; } else { toast.SetText(_dialogMsg.Msg); } }