protected override void OnLayout(bool changed, int l, int t, int r, int b) { base.OnLayout(changed, l, t, r, b); TabbedPageBadgeCount formsPage = (TabbedPageBadgeCount)Element; if (!_bottomBarInit && !formsPage.Labels) { var childViews = ViewGroup.GetViewsByType(typeof(BottomNavigationItemView)); int dpAsPixels = 0; foreach (var childView in childViews) { if (dpAsPixels == 0) { var imageIcon = childView.FindViewById(Xamarin.Forms.Platform.Android.Resource.Id.icon); var parentHeightHalf = ((ViewGroup)childView.Parent).MeasuredHeight / 2; var iconHeightHalf = imageIcon.MeasuredHeight / 2; var iconTop = imageIcon.Top; dpAsPixels = parentHeightHalf - iconHeightHalf - iconTop; } childView.SetPadding(childView.PaddingLeft, dpAsPixels, childView.PaddingRight, childView.PaddingBottom); } _bottomBarInit = true; } }
protected override void OnElementChanged(ElementChangedEventArgs <TabbedPage> e) { base.OnElementChanged(e); TabbedPageBadgeCount formsPage = (TabbedPageBadgeCount)Element; if (!formsPage.Labels) { var childViews = ViewGroup.GetViewsByType(typeof(BottomNavigationItemView)); foreach (var childView in childViews) { childView.FindAndRemoveById(Xamarin.Forms.Platform.Android.Resource.Id.largeLabel); childView.FindAndRemoveById(Xamarin.Forms.Platform.Android.Resource.Id.smallLabel); } } if (e.NewElement != null) { var relativeLayout = this.GetChildAt(0) as Android.Widget.RelativeLayout; if (relativeLayout != null) { var bottomNavigationView = relativeLayout.GetChildAt(1) as BottomNavigationView; bottomNavigationView.SetShiftMode(false, false); BottomNavigationMenuView bottomNavigationMenuView = (BottomNavigationMenuView)bottomNavigationView.GetChildAt(0); int tabCount = formsPage.Tabs.Count; for (int i = 0; i < tabCount; i++) { var tabData = formsPage.Tabs[0]; BottomNavigationItemView tabItemView = (BottomNavigationItemView)bottomNavigationMenuView.GetChildAt(i); if (tabData.BadgeCaption > 0) { if (_badgeId == 0) { _badgeId = Android.Views.View.GenerateViewId(); } TextView badgeTextView = new DesignTask2.Droid.BadgeView(Context) { Id = _badgeId, BadgeCaption = tabData.BadgeCaption.ToString(), BadgeColor = tabData.BadgeColor.ToAndroid() }; tabData.PropertyChanged += (sender, args) => { TabData currentTabData = (TabData)sender; BottomNavigationItemView currentTabItemView = _tabViews[currentTabData]; DesignTask2.Droid.BadgeView currentBadgeTextView = currentTabItemView.FindViewById(_badgeId) as DesignTask2.Droid.BadgeView; if (currentBadgeTextView != null) { currentBadgeTextView.BadgeColor = currentTabData.BadgeColor.ToAndroid(); currentBadgeTextView.BadgeCaption = currentTabData.BadgeCaption > 0 ? currentTabData.BadgeCaption.ToString() : string.Empty; } }; tabItemView.AddView(badgeTextView); _tabViews.Add(tabData, tabItemView); } } } } }