static void EnsureTabIndex(ExtendedTabbedPageRenderer renderer) { var rootLayout = (RelativeLayout)renderer.GetChildAt(0); var bottomNav = (BottomNavigationViewEx)rootLayout.GetChildAt(1); var menu = (BottomNavigationMenu)bottomNav.Menu; var itemIndex = menu.FindItemIndex(bottomNav.SelectedItemId); var pageIndex = renderer.Element.Children.IndexOf(renderer.Element.CurrentPage); if (pageIndex >= 0 && pageIndex != itemIndex && pageIndex < bottomNav.ItemCount) { var menuItem = menu.GetItem(pageIndex); bottomNav.SelectedItemId = menuItem.ItemId; if (ExtendedTabbedPageRenderer.ShouldUpdateSelectedIcon && ExtendedTabbedPageRenderer.MenuItemIconSetter != null) { ExtendedTabbedPageRenderer.MenuItemIconSetter?.Invoke(menuItem, renderer.Element.CurrentPage.Icon, true); if (renderer.LastSelectedIndex != pageIndex) { var lastSelectedPage = renderer.Element.Children[renderer.LastSelectedIndex]; var lastSelectedMenuItem = menu.GetItem(renderer.LastSelectedIndex); ExtendedTabbedPageRenderer.MenuItemIconSetter?.Invoke(lastSelectedMenuItem, lastSelectedPage.Icon, false); renderer.LastSelectedIndex = pageIndex; } } } }
public static void SwitchPage(this ExtendedTabbedPageRenderer renderer, IMenuItem item) { var rootLayout = (RelativeLayout)renderer.GetChildAt(0); var bottomNav = (BottomNavigationViewEx)rootLayout.GetChildAt(1); var menu = (BottomNavigationMenu)bottomNav.Menu; var index = menu.FindItemIndex(item.ItemId); var pageIndex = index % renderer.Element.Children.Count; var currentPageIndex = renderer.Element.Children.IndexOf(renderer.Element.CurrentPage); if (currentPageIndex != pageIndex) { renderer.Element.CurrentPage = renderer.Element.Children[pageIndex]; } }
public static void Layout(this ExtendedTabbedPageRenderer renderer, int width, int height) { var rootLayout = (RelativeLayout)renderer.GetChildAt(0); var bottomNav = (BottomNavigationViewEx)rootLayout.GetChildAt(1); var Context = renderer.Context; rootLayout.Measure(MakeMeasureSpec(width, MeasureSpecMode.Exactly), MakeMeasureSpec(height, MeasureSpecMode.AtMost)); ((IPageController)renderer.Element).ContainerArea = Context.CreateRect(rootLayout.MeasuredWidth, rootLayout.GetChildAt(0).MeasuredHeight); rootLayout.Measure(MakeMeasureSpec(width, MeasureSpecMode.Exactly), MakeMeasureSpec(height, MeasureSpecMode.Exactly)); rootLayout.Layout(0, 0, rootLayout.MeasuredWidth, rootLayout.MeasuredHeight); if (renderer.Element.Children.Count == 0) { return; } int tabsHeight = bottomNav.MeasuredHeight; var item = (ViewGroup)bottomNav.GetChildAt(0); item.Measure(MakeMeasureSpec(width, MeasureSpecMode.Exactly), MakeMeasureSpec(tabsHeight, MeasureSpecMode.Exactly)); item.Layout(0, 0, width, tabsHeight); int item_w = width / item.ChildCount; for (int i = 0; i < item.ChildCount; i++) { var frame = (FrameLayout)item.GetChildAt(i); frame.Measure(MakeMeasureSpec(item_w, MeasureSpecMode.Exactly), MakeMeasureSpec(tabsHeight, MeasureSpecMode.Exactly)); frame.Layout(i * item_w, 0, i * item_w + item_w, tabsHeight); } }