/// <summary> /// Used to set badge for given tab /// </summary> /// <param name="badgeItem"> holds badge data </param> /// <param name="bottomNavigationTab"> bottom navigation tab to which badge needs to be attached </param> private static void setBadgeForTab(BadgeItem badgeItem, BottomNavigationTab bottomNavigationTab) { if (badgeItem != null) { Context context = bottomNavigationTab.Context; GradientDrawable shape = getBadgeDrawable(badgeItem, context); bottomNavigationTab.badgeView.SetBackgroundDrawable(shape); bottomNavigationTab.BadgeItem = badgeItem; badgeItem.SetTextView(bottomNavigationTab.badgeView); bottomNavigationTab.badgeView.Visibility = ViewStates.Visible; bottomNavigationTab.badgeView.SetTextColor(new Color(badgeItem.GetTextColor(context))); bottomNavigationTab.badgeView.Text = badgeItem.Text; FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams)bottomNavigationTab.badgeView.LayoutParameters; layoutParams.Gravity = badgeItem.Gravity; bottomNavigationTab.badgeView.LayoutParameters = layoutParams; if (badgeItem.Hidden) { // if hide is called before the initialisation of bottom-bar this will handle that // by hiding it. badgeItem.Hide(); } } }
/// <summary> /// Internal Method to select a tab /// </summary> /// <param name="newPosition"> to select a tab after bottom navigation bar is initialised </param> /// <param name="firstTab"> if firstTab the no ripple animation will be done </param> /// <param name="callListener"> is listener callbacks enabled for this change </param> /// <param name="forcedSelection"> if bottom navigation bar forced to select tab (in this case call on selected irrespective of previous state </param> private void selectTabInternal(int newPosition, bool firstTab, bool callListener, bool forcedSelection) { int oldPosition = mSelectedPosition; if (mSelectedPosition != newPosition) { if (mBackgroundStyle == BackgroundStyle.BACKGROUND_STYLE_STATIC) { if (mSelectedPosition != -1) { mBottomNavigationTabs[mSelectedPosition].unSelect(true, mAnimationDuration); } mBottomNavigationTabs[newPosition].Select(true, mAnimationDuration); } else if (mBackgroundStyle == BackgroundStyle.BACKGROUND_STYLE_RIPPLE) { if (mSelectedPosition != -1) { mBottomNavigationTabs[mSelectedPosition].unSelect(false, mAnimationDuration); } mBottomNavigationTabs[newPosition].Select(false, mAnimationDuration); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final BottomNavigationTab clickedView = mBottomNavigationTabs.get(newPosition); BottomNavigationTab clickedView = mBottomNavigationTabs[newPosition]; if (firstTab) { // Running a ripple on the opening app won't be good so on firstTab this won't run. mContainer.SetBackgroundColor(new Color(clickedView.ActiveColor)); mBackgroundOverlay.Visibility = ViewStates.Gone; } else { mBackgroundOverlay.Post(() => { // try { BottomNavigationHelper.setBackgroundWithRipple(clickedView, mContainer, mBackgroundOverlay, clickedView.ActiveColor, mRippleAnimationDuration); // } catch (Exception e) { // mContainer.setBackgroundColor(clickedView.getActiveColor()); // mBackgroundOverlay.setVisibility(ViewStates.Gone); // } }); } } mSelectedPosition = newPosition; } ThreadPool.QueueUserWorkItem(o => { if (callListener) { sendListenerCall(oldPosition, newPosition, forcedSelection); } }); }
/////////////////////////////////////////////////////////////////////////// // Internal Methods of the class /////////////////////////////////////////////////////////////////////////// /// <summary> /// Internal method to setup tabs /// </summary> /// <param name="bottomNavigationTab"> Tab item </param> /// <param name="currentItem"> data structure for tab item </param> /// <param name="itemWidth"> tab item in-active width </param> /// <param name="itemActiveWidth"> tab item active width </param> private void setUpTab(BottomNavigationTab bottomNavigationTab, BottomNavigationItem currentItem, int itemWidth, int itemActiveWidth) { bottomNavigationTab.InactiveWidth = itemWidth; bottomNavigationTab.ActiveWidth = itemActiveWidth; bottomNavigationTab.Position = mBottomNavigationItems.IndexOf(currentItem); bottomNavigationTab.SetOnClickListener(new OnClickListenerAnonymousInnerClass(this)); mBottomNavigationTabs.Add(bottomNavigationTab); BottomNavigationHelper.bindTabWithData(currentItem, bottomNavigationTab, this); bottomNavigationTab.initialise(mBackgroundStyle == BackgroundStyle.BACKGROUND_STYLE_STATIC); mTabContainer.AddView(bottomNavigationTab); }
public void OnClick(View v) { BottomNavigationTab bottomNavigationTabView = (BottomNavigationTab)v; outerInstance.selectTabInternal(bottomNavigationTabView.Position, false, true, false); }
/// <summary> /// Used to get set data to the Tab views from navigation items /// </summary> /// <param name="bottomNavigationItem"> holds all the data </param> /// <param name="bottomNavigationTab"> view to which data need to be set </param> /// <param name="bottomNavigationBar"> view which holds all the tabs </param> public static void bindTabWithData(BottomNavigationItem bottomNavigationItem, BottomNavigationTab bottomNavigationTab, BottomNavigationBar bottomNavigationBar) { Context context = bottomNavigationBar.Context; bottomNavigationTab.Label = bottomNavigationItem.getTitle(context); bottomNavigationTab.Icon = bottomNavigationItem.getIcon(context); int activeColor = bottomNavigationItem.getActiveColor(context); int inActiveColor = bottomNavigationItem.getInActiveColor(context); if (activeColor != -1) { bottomNavigationTab.ActiveColor = activeColor; } else { bottomNavigationTab.ActiveColor = bottomNavigationBar.ActiveColor; } if (inActiveColor != -1) { bottomNavigationTab.InactiveColor = inActiveColor; } else { bottomNavigationTab.InactiveColor = bottomNavigationBar.InActiveColor; } if (bottomNavigationItem.InActiveIconAvailable) { Drawable inactiveDrawable = bottomNavigationItem.getInactiveIcon(context); if (inactiveDrawable != null) { bottomNavigationTab.InactiveIcon = inactiveDrawable; } } bottomNavigationTab.ItemBackgroundColor = bottomNavigationBar.BackgroundColor; setBadgeForTab(bottomNavigationItem.BadgeItem, bottomNavigationTab); }
public AnimatorUpdateListenerAnonymousInnerClass2(BottomNavigationTab outerInstance) { this.outerInstance = outerInstance; }