Ejemplo n.º 1
0
        /// <summary>
        /// The ApplyBadge.
        /// </summary>
        /// <param name="badgeText">The badgeText<see cref="string"/>.</param>
        /// <param name="badgeBg">The badgeBg<see cref="Color"/>.</param>
        /// <param name="itemId">The itemId<see cref="int"/>.</param>
        /// <param name="textColor">The textColor<see cref="Color"/>.</param>
        private void ApplyBadge(string badgeText,
                                Color badgeBg, int itemId, Color textColor)
        {
            using BottomNavigationMenuView bottomNavigationMenuView =
                      (BottomNavigationMenuView)_bottomNavigationView.GetChildAt(0);
            var itemView = bottomNavigationMenuView
                           .FindViewById <BottomNavigationItemView>(itemId);

            if (string.IsNullOrEmpty(badgeText))
            {
                itemView.ApplyBadge(badgeBg, "", textColor);
            }
            else
            {
                int.TryParse(badgeText, out var badgeNumber);
                if (badgeNumber != 0)
                {
                    itemView.ApplyBadge(badgeBg, badgeText, textColor);
                }
                else
                {
                    itemView.ApplyTinyBadge(textColor);
                }
            }
        }
Ejemplo n.º 2
0
        public static void disableShiftMode(BottomNavigationView view)
        {
            BottomNavigationMenuView menuView = (BottomNavigationMenuView)view.GetChildAt(0);

            try
            {
                for (int i = 0; i < menuView.ChildCount; i++)
                {
                    BottomNavigationItemView item = (BottomNavigationItemView)menuView.GetChildAt(i);
                    //noinspection RestrictedApi
                    item.SetShiftingMode(false);
                    // set once again checked value, so view will be updated
                    //noinspection RestrictedApi
                    item.SetChecked(item.ItemData.IsChecked);
                }
            }
            catch (NoSuchFieldException e)
            {
                //Log.("BNVHelper", "Unable to get shift mode field", e);
            }
            catch (IllegalAccessException e)
            {
                // Log.e("BNVHelper", "Unable to change value of shift mode", e);
            }
        }
Ejemplo n.º 3
0
        public static void disableShiftMode(BottomNavigationView navigationView)
        {
            BottomNavigationMenuView menuView = (BottomNavigationMenuView)navigationView.GetChildAt(0);


            try
            {
                var shiftingMode = typeof(BottomNavigationMenuView).GetField("mShiftingMode");

                //shiftingMode.setAccessible(true);
                //shiftingMode.setBoolean(menuView, false);
                //shiftingMode.SetValue(menuView, false);
                //shiftingMode.setAccessible(false);

                for (int i = 0; i < menuView.ChildCount; i++)
                {
                    BottomNavigationItemView itemView = (BottomNavigationItemView)menuView.GetChildAt(i);
                    itemView.SetShiftingMode(false);
                    itemView.SetChecked(itemView.ItemData.IsChecked);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        protected override void OnElementChanged(ElementChangedEventArgs <TabbedPage> e)
        {
            base.OnElementChanged(e);

            if (ViewGroup != null && ViewGroup.ChildCount > 0)
            {
                BottomNavigationMenuView bottomNavigationMenuView = FindChildOfType <BottomNavigationMenuView>(ViewGroup);

                if (bottomNavigationMenuView != null)
                {
                    try
                    {
                        var shiftMode = bottomNavigationMenuView.Class.GetDeclaredField("mShiftingMode");
                        shiftMode.Accessible = true;
                        shiftMode.SetBoolean(bottomNavigationMenuView, false);
                        shiftMode.Accessible = false;
                        shiftMode.Dispose();
                    }
                    catch (Exception ex)
                    {
                        Crashes.TrackError(ex);
                    }

                    for (var i = 0; i < bottomNavigationMenuView.ChildCount; i++)
                    {
                        var item = bottomNavigationMenuView.GetChildAt(i) as BottomNavigationItemView;
                        if (item == null)
                        {
                            continue;
                        }

                        item.SetShifting(false);
                        item.SetChecked(item.ItemData.IsChecked);
                    }

                    if (bottomNavigationMenuView.ChildCount > 0)
                    {
                        bottomNavigationMenuView.UpdateMenuView();
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public static void DisableShiftMode(BottomNavigationView view)
        {
            BottomNavigationMenuView menuView = (BottomNavigationMenuView)view.GetChildAt(0);

            try
            {
                var sm = menuView.Class.GetDeclaredField("mShiftingMode");
                sm.Accessible = true;
                sm.SetBoolean(menuView, false);
                sm.Accessible = false;
                for (int i = 0; i < menuView.ChildCount; i++)
                {
                    BottomNavigationItemView item = (BottomNavigationItemView)menuView.GetChildAt(i);
                    item.SetShiftingMode(false);
                    item.SetChecked(item.ItemData.IsChecked);
                }
            }
            catch (System.Exception)
            {
            }
        }
 protected override void OnElementChanged(ElementChangedEventArgs <TabbedPage> e)
 {
     base.OnElementChanged(e);
     if (ViewGroup != null && ViewGroup.ChildCount > 0)
     {
         BottomNavigationMenuView bottomNavigationMenuView = FindChildOfType <BottomNavigationMenuView>(ViewGroup);
         if (bottomNavigationMenuView != null)
         {
             // use extension method from XF
             bottomNavigationMenuView.SetShiftMode(false, false);
         }
     }
     T FindChildOfType <T>(ViewGroup viewGroup) where T : Android.Views.View
     {
         if (viewGroup == null || viewGroup.ChildCount == 0)
         {
             return(null);
         }
         for (var i = 0; i < viewGroup.ChildCount; i++)
         {
             var child      = viewGroup.GetChildAt(i);
             var typedChild = child as T;
             if (typedChild != null)
             {
                 return(typedChild);
             }
             if (!(child is ViewGroup))
             {
                 continue;
             }
             var result = FindChildOfType <T>(child as ViewGroup);
             if (result != null)
             {
                 return(result);
             }
         }
         return(null);
     }
 }
        public static void DisableShiftMode(BottomNavigationView view)
        {
            BottomNavigationMenuView menuView = (BottomNavigationMenuView)view.GetChildAt(0);

            try
            {
                Java.Lang.Reflect.Field shiftingMode = menuView.Class.GetDeclaredField("mShiftingMode");
                shiftingMode.Accessible = true;
                shiftingMode.SetBoolean(menuView, false);
                shiftingMode.Accessible = false;
                for (int i = 0; i < menuView.ChildCount; i++)
                {
                    BottomNavigationItemView itemView = (BottomNavigationItemView)menuView.GetChildAt(i);
                    itemView.SetShiftingMode(false);
                    itemView.SetChecked(itemView.ItemData.IsChecked);
                }
            }
            catch (Exception ex)
            {
                BuglyUtil.PostException("unable to get shift mode field" + ex);
            }
        }
        protected override void OnElementChanged(ElementChangedEventArgs <TabbedPage> e)
        {
            base.OnElementChanged(e);

            if (ViewGroup != null && ViewGroup.ChildCount > 0)
            {
                _bottomNavigationMenuView = FindChildOfType <BottomNavigationMenuView>(ViewGroup);
                if (_bottomNavigationMenuView != null)
                {
                    var shiftMode = _bottomNavigationMenuView.Class.GetDeclaredField("mShiftingMode");

                    shiftMode.Accessible = true;
                    shiftMode.SetBoolean(_bottomNavigationMenuView, false);
                    shiftMode.Accessible = false;
                    shiftMode.Dispose();

                    for (var i = 0; i < _bottomNavigationMenuView.ChildCount; i++)
                    {
                        if (!(_bottomNavigationMenuView.GetChildAt(i) is BottomNavigationItemView item))
                        {
                            continue;
                        }
                        item.SetIconTintList(null); // use Original icon color
                        item.SetShiftingMode(false);
                        item.SetChecked(item.ItemData.IsChecked);
                        // Set text color
                        //item.SetTextColor(new ColorStateList(states,colors));
                    }
                    Element.Children[_bottomNavigationMenuView.SelectedItemId].Icon
                        = Element.Children[_bottomNavigationMenuView.SelectedItemId].Icon.File.Replace("_2", "");

                    if (_bottomNavigationMenuView.ChildCount > 0)
                    {
                        _bottomNavigationMenuView.UpdateMenuView();
                    }
                }
            }
        }
        protected override void OnElementChanged(ElementChangedEventArgs <TabbedPage> e)
        {
            base.OnElementChanged(e);

            BottomTabbedPage formsPage = (BottomTabbedPage)Element;

            if (!formsPage.Labels)
            {
                var childViews = ViewGroup.GetViewsByType(typeof(BottomNavigationItemView));

                foreach (var childView in childViews)
                {
                    childView.FindAndRemoveById(Resource.Id.largeLabel);
                    childView.FindAndRemoveById(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 BadgeView(Context)
                            {
                                Id = _badgeId, BadgeCaption = tabData.BadgeCaption.ToString(), BadgeColor = tabData.BadgeColor.ToAndroid()
                            };

                            tabData.PropertyChanged += (sender, args) =>
                            {
                                TabData currentTabData = (TabData)sender;
                                BottomNavigationItemView currentTabItemView = _tabViews[currentTabData];

                                BadgeView currentBadgeTextView = currentTabItemView.FindViewById(_badgeId) as 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);
                        }
                    }
                }
            }
        }
        BottomNavigationView CustomizeBottomNavigationViewMenuItems(BottomNavigationView bottomNavigationView, List <TabStates.TabFragPackage> tabs = null, bool setExisting = false, bool removeShiftMode = true)
        {
            BottomNavigationMenuView menuView = (BottomNavigationMenuView)bottomNavigationView.GetChildAt(0);

            try {
                //view.ScaleY = (float)1.1;
                var shiftingMode = menuView.Class.GetDeclaredField("mShiftingMode");
                shiftingMode.Accessible = true;
                shiftingMode.SetBoolean(menuView, false);
                shiftingMode.Accessible = false;
            }
            catch {  }
            var positionKey = -1;

            if (!setExisting && tabs != null)
            {
                foreach (var tab in tabs)
                {
                    positionKey++;
                    var item = (BottomNavigationItemView)menuView.GetChildAt(positionKey);
                    item.SetShiftingMode(false);
                    // set once again checked value, so view will be updated
                    item.SetChecked(true);
                    //BottomNavigationItemView tab = new BottomNavigationItemView(GetMainContext());
                    item.SetIcon(tab.Icon);
                    item.SetEnabled(true);
                    item.SetTitle(tab.Title);
                    item.ItemPosition = positionKey;
                    //menuView.AddView(tab, positionKey);
                }
            }
            else if (setExisting && tabs != null)
            {
                for (int i = 0; i < menuView.ChildCount; i++)
                {
                    try {
                        GetBottomNavItemFromView(menuView.GetChildAt(i)).SetShiftingMode(false);
                        GetBottomNavItemFromView(menuView.GetChildAt(i)).ItemData.SetIcon(tabs[i].Icon);
                        GetBottomNavItemFromView(menuView.GetChildAt(i)).ItemData.SetTitle(tabs[i].Title);
                        GetBottomNavItemFromView(menuView.GetChildAt(i)).SetChecked(true);
                        if (i == 0)
                        {
                            GetBottomNavItemFromView(menuView.GetChildAt(i)).LongClick += HomeLongClickListener;
                        }
                        if (i == 2)
                        {
                            GetBottomNavItemFromView(menuView.GetChildAt(i)).LongClick += FeedTabLongClickListener;
                        }
                        if (i == 3)
                        {
                            GetBottomNavItemFromView(menuView.GetChildAt(i)).LongClick += MyChannelLongClickListener;
                        }
                        if (i == 4)
                        {
                            GetBottomNavItemFromView(menuView.GetChildAt(i)).LongClick += SettingsTabLongClickListener;
                        }
                    }
                    catch { }
                    try
                    {
                        NavViewItemList.Add(GetBottomNavItemFromView(menuView.GetChildAt(i)));
                    }
                    catch { }
                }
            }

            return(bottomNavigationView);
        }
Ejemplo n.º 11
0
        private void UpgradeTabbedItemsAppereance()
        {
            if (bottomTabBarItemsStateList == null)
            {
                InitializeBottomTabBarItemsStateList();
            }

            if (ViewGroup != null && ViewGroup.ChildCount > 0)
            {
                BottomNavigationView bottomNavigationView = FindChildOfType <BottomNavigationView>(ViewGroup);
                bottomNavigationView.SetShiftMode(false, false);
                BottomNavigationMenuView bottomNavigationMenuView = FindChildOfType <BottomNavigationMenuView>(ViewGroup);

                for (int i = 0; i < bottomNavigationMenuView.ChildCount; i++)
                {
                    BottomNavigationItemView item = (BottomNavigationItemView)bottomNavigationMenuView.GetChildAt(i);
                    item.SetTextColor(bottomTabBarItemsStateList);
                    item.SetShifting(false);
                    item.SetLabelVisibilityMode(LabelVisibilityMode.LabelVisibilityLabeled);
                    item.SetChecked(item.ItemData.IsChecked);

                    Android.Views.View activeLabel = item.FindViewById(Resource.Id.largeLabel);
                    if (activeLabel is TextView)
                    {
                        var font = Typeface.CreateFromAsset(_context.Assets, "Montserrat-SemiBold.ttf");
                        (activeLabel as TextView).Typeface = font;
                    }

                    Android.Views.View inActiveLabel = item.FindViewById(Resource.Id.smallLabel);
                    if (activeLabel is TextView)
                    {
                        var font = Typeface.CreateFromAsset(_context.Assets, "Montserrat-SemiBold.ttf");
                        (inActiveLabel as TextView).Typeface = font;
                    }
                }
            }

            T FindChildOfType <T>(ViewGroup viewGroup) where T : Android.Views.View
            {
                if (viewGroup == null || viewGroup.ChildCount == 0)
                {
                    return(null);
                }

                for (var i = 0; i < viewGroup.ChildCount; i++)
                {
                    var child = viewGroup.GetChildAt(i);

                    var typedChild = child as T;
                    if (typedChild != null)
                    {
                        return(typedChild);
                    }

                    if (!(child is ViewGroup))
                    {
                        continue;
                    }

                    var result = FindChildOfType <T>(child as ViewGroup);

                    if (result != null)
                    {
                        return(result);
                    }
                }

                return(null);
            }
        }