private AndroidView CreateScrollViewContent() { View content = _ZoomScrollView.Content; if (content != null) { IVisualElementRenderer renderer = FormsPlatform.GetRenderer(content); if (renderer == null) { renderer = FormsPlatform.CreateRendererWithContext(content, Context); FormsPlatform.SetRenderer(content, renderer); } if (renderer.View.Parent != null) { renderer.View.RemoveFromParent(); } _contentTracker = new VisualElementTracker(renderer); _contentTracker.UpdateLayout(); return(renderer.View); } return(null); }
public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable, Android.Content.Context context) { var renderer = XFPlatform.GetRenderer(bindable); if (renderer == null) { renderer = XFPlatform.CreateRendererWithContext(bindable, context); XFPlatform.SetRenderer(bindable, renderer); } return(renderer); }
public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable) { var renderer = XFPlatform.GetRenderer(bindable); if (renderer == null) { renderer = XFPlatform.CreateRendererWithContext(bindable, CrossCurrentActivity.Current.Activity); XFPlatform.SetRenderer(bindable, renderer); } return(renderer); }
public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable) { var renderer = XFPlatform.GetRenderer(bindable); if (renderer == null) { renderer = XFPlatform.CreateRenderer(bindable); XFPlatform.SetRenderer(bindable, renderer); } return(renderer); }
public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable, bool deneme = false) { var renderer = XFPlatform.GetRenderer(bindable); if (renderer == null || deneme) { if (renderer != null) { renderer.Dispose(); //renderer = null; } renderer = XFPlatform.CreateRendererWithContext(bindable, CrossCurrentActivity.Current.Activity); XFPlatform.SetRenderer(bindable, renderer); } return(renderer); }
void UpdateHeader() { var header = (VisualElement)Controller.HeaderElement; if (_headerRenderer != null) { var reflectableType = _headerRenderer as System.Reflection.IReflectableType; var rendererType = reflectableType != null?reflectableType.GetTypeInfo().AsType() : _headerRenderer.GetType(); if (header == null || Registrar.Registered.GetHandlerTypeForObject(header) != rendererType) { if (_headerView != null) { _headerView.Child = null; } _headerRenderer.Dispose(); _headerRenderer = null; } } if (header == null) { return; } if (_headerRenderer != null) { _headerRenderer.SetElement(header); } else { _headerRenderer = Platform.CreateRenderer(header); if (_headerView != null) { _headerView.Child = _headerRenderer; } } Platform.SetRenderer(header, _headerRenderer); }
public static void ChangePage(this ExtendedTabbedPageRenderer renderer, FrameLayout pageContainer, Page page) { renderer.Context.HideKeyboard(renderer); if (page == null) { return; } if (Platform.GetRenderer(page) == null) { Platform.SetRenderer(page, Platform.CreateRendererWithContext(page, renderer.Context)); } var pageContent = Platform.GetRenderer(page).View; pageContainer.AddView(pageContent); if (pageContainer.ChildCount > 1) { pageContainer.RemoveViewAt(0); } EnsureTabIndex(renderer); }
void ClearChildrenRenderers(VisualElement view) { if (view == null) { return; } foreach (Element logicalChild in ((IElementController)view).LogicalChildren) { var child = logicalChild as VisualElement; if (child != null) { IVisualElementRenderer renderer = Platform.GetRenderer(child); if (renderer == null) { continue; } if (renderer.View.Parent != _parent.View) { continue; } renderer.View.RemoveFromParent(); Platform.SetRenderer(child, null); PushRenderer(renderer); } } var viewGroup = _parent.View as ViewGroup; if (viewGroup != null && viewGroup.ChildCount != 0) { viewGroup.RemoveAllViews(); } }
protected override AView GetCellCore(Cell item, AView convertView, ViewGroup parent, Context context) { Performance.Start(); var cell = (ViewCell)item; var container = convertView as ViewCellContainer; if (container != null) { container.Update(cell); Performance.Stop(); return(container); } BindableProperty unevenRows = null, rowHeight = null; if (ParentView is TableView) { unevenRows = TableView.HasUnevenRowsProperty; rowHeight = TableView.RowHeightProperty; } else if (ParentView is ListView) { unevenRows = ListView.HasUnevenRowsProperty; rowHeight = ListView.RowHeightProperty; } IVisualElementRenderer view = Platform.CreateRenderer(cell.View); Platform.SetRenderer(cell.View, view); cell.View.IsPlatformEnabled = true; var c = new ViewCellContainer(context, view, cell, ParentView, unevenRows, rowHeight); Performance.Stop(); return(c); }
public override AView OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (_shellContent != null) { _page = ((IShellContentController)_shellContent).GetOrCreateContent(); } _root = inflater.Inflate(Resource.Layout.ShellContent, null).JavaCast <CoordinatorLayout>(); _toolbar = _root.FindViewById <Toolbar>(Resource.Id.shellcontent_toolbar); _renderer = Platform.CreateRenderer(_page, Context); Platform.SetRenderer(_page, _renderer); _shellPageContainer = new ShellPageContainer(Context, _renderer); if (_root is ViewGroup vg) { vg.AddView(_shellPageContainer); } _toolbarTracker = _shellContext.CreateTrackerForToolbar(_toolbar); _toolbarTracker.Page = _page; // this is probably not the most ideal way to do that _toolbarTracker.CanNavigateBack = _shellContent == null; _appearanceTracker = _shellContext.CreateToolbarAppearanceTracker(); ((IShellController)_shellContext.Shell).AddAppearanceObserver(this, _page); if (_shellPageContainer.LayoutParameters is CoordinatorLayout.LayoutParams layoutParams) { layoutParams.Behavior = new AppBarLayout.ScrollingViewBehavior(); } return(_root); }
void SetUpNewElement(IndicatorView newElement) { if (newElement == null) { IndicatorsView = null; return; } IndicatorsView = newElement; IndicatorsView.PropertyChanged += OnElementPropertyChanged; if (Tracker == null) { _visualElementTracker = new VisualElementTracker(this); //_visualElementPackager = new VisualElementPackager(this); //_visualElementPackager.Load(); } this.EnsureId(); UpdateBackgroundColor(); if (IndicatorsView.IndicatorTemplate != null) { var control = IndicatorsView.IndicatorLayout.GetRenderer() ?? Platform.CreateRendererWithContext(IndicatorsView.IndicatorLayout, Context); Platform.SetRenderer(IndicatorsView.IndicatorLayout, control); AddView(control as AView); } else { UpdateItemsSource(); } ElevationHelper.SetElevation(this, newElement); }
void UpdateContent() { if (_renderer != null) { _renderer.View.RemoveFromParent(); _renderer.Dispose(); _renderer = null; } if (RefreshView.Content != null) { _renderer = Platform.CreateRenderer(RefreshView.Content, Context); Platform.SetRenderer(RefreshView.Content, _renderer); if (_renderer.View.Parent != null) { _renderer.View.RemoveFromParent(); } using (var layoutParams = new LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent)) SwipeRefreshLayout.AddView(_renderer.View, layoutParams); } }
protected override void Dispose(bool disposing) { if (CheckFlagsForDisposed()) { return; } _flags |= VisualElementRendererFlags.Disposed; if (disposing) { SetOnClickListener(null); SetOnTouchListener(null); EffectUtilities.UnregisterEffectControlProvider(this, Element); if (Element != null) { Element.PropertyChanged -= _propertyChangeHandler; } if (Tracker != null) { Tracker.Dispose(); Tracker = null; } if (_packager != null) { _packager.Dispose(); _packager = null; } if (_gestureManager != null) { _gestureManager.Dispose(); _gestureManager = null; } if (ManageNativeControlLifetime) { while (ChildCount > 0) { AView child = GetChildAt(0); child.RemoveFromParent(); child.Dispose(); } } if (Element != null) { if (Platform.GetRenderer(Element) == this) { Platform.SetRenderer(Element, null); } Element = null; } } base.Dispose(disposing); }
protected override void Dispose(bool disposing) { if ((_flags & VisualElementRendererFlags.Disposed) != 0) { return; } _flags |= VisualElementRendererFlags.Disposed; if (disposing) { if (Tracker != null) { Tracker.Dispose(); Tracker = null; } if (_packager != null) { _packager.Dispose(); _packager = null; } if (_scaleDetector != null && _scaleDetector.IsValueCreated) { _scaleDetector.Value.Dispose(); _scaleDetector = null; } if (_gestureListener != null) { _gestureListener.Dispose(); _gestureListener = null; } if (ManageNativeControlLifetime) { int count = ChildCount; for (var i = 0; i < count; i++) { AView child = GetChildAt(i); child.Dispose(); } } RemoveAllViews(); if (Element != null) { Element.PropertyChanged -= _propertyChangeHandler; UnsubscribeGestureRecognizers(Element); if (Platform.GetRenderer(Element) == this) { Platform.SetRenderer(Element, null); } Element = null; } } base.Dispose(disposing); }
public void Update(ViewCell cell) { Performance.Start(); var renderer = GetChildAt(0) as IVisualElementRenderer; var viewHandlerType = Registrar.Registered.GetHandlerTypeForObject(cell.View) ?? typeof(Platform.DefaultRenderer); var reflectableType = renderer as System.Reflection.IReflectableType; var rendererType = reflectableType != null?reflectableType.GetTypeInfo().AsType() : (renderer != null ? renderer.GetType() : typeof(System.Object)); if (renderer != null && rendererType == viewHandlerType) { Performance.Start("Reuse"); _viewCell = cell; cell.View.DisableLayout = true; foreach (VisualElement c in cell.View.Descendants()) { c.DisableLayout = true; } Performance.Start("Reuse.SetElement"); renderer.SetElement(cell.View); Performance.Stop("Reuse.SetElement"); Platform.SetRenderer(cell.View, _view); cell.View.DisableLayout = false; foreach (VisualElement c in cell.View.Descendants()) { c.DisableLayout = false; } var viewAsLayout = cell.View as Layout; if (viewAsLayout != null) { viewAsLayout.ForceLayout(); } Invalidate(); Performance.Stop("Reuse"); Performance.Stop(); return; } RemoveView(_view.View); Platform.SetRenderer(_viewCell.View, null); _viewCell.View.IsPlatformEnabled = false; _view.View.Dispose(); _viewCell = cell; _view = Platform.CreateRenderer(_viewCell.View, Context); Platform.SetRenderer(_viewCell.View, _view); AddView(_view.View); UpdateIsEnabled(); UpdateWatchForLongPress(); Performance.Stop(); }
Task <bool> SwitchContentAsync(Page view, bool animated, bool removed = false) { Context.HideKeyboard(this); IVisualElementRenderer rendererToAdd = Platform.GetRenderer(view); bool existing = rendererToAdd != null; if (!existing) { Platform.SetRenderer(view, rendererToAdd = Platform.CreateRenderer(view)); } Page pageToRemove = _current; IVisualElementRenderer rendererToRemove = pageToRemove == null ? null : Platform.GetRenderer(pageToRemove); PageContainer containerToRemove = rendererToRemove == null ? null : (PageContainer)rendererToRemove.ViewGroup.Parent; PageContainer containerToAdd = (PageContainer)rendererToAdd.ViewGroup.Parent ?? new PageContainer(Context, rendererToAdd); containerToAdd.SetWindowBackground(); _current = view; ((Platform)Element.Platform).NavAnimationInProgress = true; var tcs = new TaskCompletionSource <bool>(); if (animated) { if (s_currentAnimation != null) { s_currentAnimation.Cancel(); } if (removed) { // animate out if (containerToAdd.Parent != this) { AddView(containerToAdd, Element.LogicalChildren.IndexOf(rendererToAdd.Element)); } else { ((Page)rendererToAdd.Element).SendAppearing(); } containerToAdd.Visibility = ViewStates.Visible; if (containerToRemove != null) { Action <AndroidAnimation.Animator> done = a => { containerToRemove.Visibility = ViewStates.Gone; containerToRemove.Alpha = 1; containerToRemove.ScaleX = 1; containerToRemove.ScaleY = 1; RemoveView(containerToRemove); tcs.TrySetResult(true); ((Platform)Element.Platform).NavAnimationInProgress = false; VisualElement removedElement = rendererToRemove.Element; rendererToRemove.Dispose(); if (removedElement != null) { Platform.SetRenderer(removedElement, null); } }; // should always happen s_currentAnimation = containerToRemove.Animate().Alpha(0).ScaleX(0.8f).ScaleY(0.8f).SetDuration(250).SetListener(new GenericAnimatorListener { OnEnd = a => { s_currentAnimation = null; done(a); }, OnCancel = done }); } } else { bool containerAlreadyAdded = containerToAdd.Parent == this; // animate in if (!containerAlreadyAdded) { AddView(containerToAdd); } else { ((Page)rendererToAdd.Element).SendAppearing(); } if (existing) { Element.ForceLayout(); } containerToAdd.Alpha = 0; containerToAdd.ScaleX = containerToAdd.ScaleY = 0.8f; containerToAdd.Visibility = ViewStates.Visible; s_currentAnimation = containerToAdd.Animate().Alpha(1).ScaleX(1).ScaleY(1).SetDuration(250).SetListener(new GenericAnimatorListener { OnEnd = a => { if (containerToRemove != null && containerToRemove.Handle != IntPtr.Zero) { containerToRemove.Visibility = ViewStates.Gone; if (pageToRemove != null) { pageToRemove.SendDisappearing(); } } s_currentAnimation = null; tcs.TrySetResult(true); ((Platform)Element.Platform).NavAnimationInProgress = false; } }); } } else { // just do it fast if (containerToRemove != null) { if (removed) { RemoveView(containerToRemove); } else { containerToRemove.Visibility = ViewStates.Gone; } } if (containerToAdd.Parent != this) { AddView(containerToAdd); } else { ((Page)rendererToAdd.Element).SendAppearing(); } if (containerToRemove != null && !removed) { pageToRemove.SendDisappearing(); } if (existing) { Element.ForceLayout(); } containerToAdd.Visibility = ViewStates.Visible; tcs.SetResult(true); ((Platform)Element.Platform).NavAnimationInProgress = false; } return(tcs.Task); }
protected virtual void AddChildView(VisualElement childView) { _pageContainer = null; Page page = childView as NavigationPage ?? (Page)(childView as TabbedPage); if (page == null) { // The thing we're adding is not a NavigationPage or TabbedPage, so we can just use the old AddChildView if (_currentFragment != null) { if (!_parent.IsAttachedToRoot()) { return; } // But first, if the previous occupant of this container was a fragment, we need to remove it properly FragmentTransaction transaction = FragmentManager.BeginTransactionEx(); transaction.RemoveEx(_currentFragment); transaction.SetTransitionEx((int)FragmentTransit.None); if (IsAttachedToWindow) { ExecuteTransaction(transaction); } else { _transaction = transaction; } _currentFragment = null; } IVisualElementRenderer renderer = Platform.GetRenderer(childView); if (renderer == null) { Platform.SetRenderer(childView, renderer = Platform.CreateRenderer(childView, Context)); } if (renderer.View.Parent != this) { if (renderer.View.Parent != null) { renderer.View.RemoveFromParent(); } SetDefaultBackgroundColor(renderer); AddView(renderer.View); renderer.UpdateLayout(); } } else { if (!_parent.IsAttachedToRoot()) { return; } // The renderers for NavigationPage and TabbedPage both host fragments, so they need to be wrapped in a // FragmentContainer in order to get isolated fragment management Fragment fragment = FragmentContainer.CreateInstance(page); var fc = fragment as FragmentContainer; fc?.SetOnCreateCallback(pc => { _pageContainer = pc; UpdateFlowDirection(); SetDefaultBackgroundColor(pc.Child); }); FragmentTransaction transaction = FragmentManager.BeginTransactionEx(); if (_currentFragment != null) { transaction.RemoveEx(_currentFragment); } transaction.AddEx(Id, fragment); transaction.SetTransitionEx((int)FragmentTransit.None); if (IsAttachedToWindow) { ExecuteTransaction(transaction); } else { _transaction = transaction; } _currentFragment = fragment; } }