Beispiel #1
0
        void UpdateToolbar()
        {
            if (_disposed)
            {
                return;
            }

            Context  context             = Context;
            AToolbar bar                 = _toolbar;
            ActionBarDrawerToggle toggle = _drawerToggle;

            if (bar == null)
            {
                return;
            }

            bool isNavigated = NavigationPageController.StackDepth > 1;

            bar.NavigationIcon = null;
            Page currentPage = Element.CurrentPage;

            if (isNavigated)
            {
                if (NavigationPage.GetHasBackButton(currentPage) && !Context.IsDesignerContext())
                {
                    if (toggle != null)
                    {
                        toggle.DrawerIndicatorEnabled = false;
                        toggle.SyncState();
                    }

                    var activity = (AppCompatActivity)context.GetActivity();
                    var icon     = new DrawerArrowDrawable(activity.SupportActionBar.ThemedContext);
                    icon.Progress      = 1;
                    bar.NavigationIcon = icon;

                    var prevPage = Element.Peek(1);
                    _defaultNavigationContentDescription = bar.SetNavigationContentDescription(prevPage, _defaultNavigationContentDescription);
                }
                else if (toggle != null && _flyoutPage != null)
                {
                    toggle.DrawerIndicatorEnabled = _flyoutPage.ShouldShowToolbarButton();
                    toggle.SyncState();
                }
            }
            else
            {
                if (toggle != null && _flyoutPage != null)
                {
                    toggle.DrawerIndicatorEnabled = _flyoutPage.ShouldShowToolbarButton();
                    toggle.SyncState();
                }
            }

            Color tintColor = Element.BarBackgroundColor;

            if (Forms.IsLollipopOrNewer)
            {
                if (tintColor.IsDefault)
                {
                    bar.BackgroundTintMode = null;
                }
                else
                {
                    bar.BackgroundTintMode = PorterDuff.Mode.Src;
                    bar.BackgroundTintList = ColorStateList.ValueOf(tintColor.ToAndroid());
                }
            }
            else
            {
                if (tintColor.IsDefault && _backgroundDrawable != null)
                {
                    bar.SetBackground(_backgroundDrawable);
                }
                else if (!tintColor.IsDefault)
                {
                    if (_backgroundDrawable == null)
                    {
                        _backgroundDrawable = bar.Background;
                    }
                    bar.SetBackgroundColor(tintColor.ToAndroid());
                }
            }

            Brush barBackground = Element.BarBackground;

            bar.UpdateBackground(barBackground);

            Color textColor = Element.BarTextColor;

            if (!textColor.IsDefault)
            {
                bar.SetTitleTextColor(textColor.ToAndroid().ToArgb());
            }

            Color navIconColor = NavigationPage.GetIconColor(Current);

            if (!navIconColor.IsDefault && bar.NavigationIcon != null)
            {
                DrawableExtensions.SetColorFilter(bar.NavigationIcon, navIconColor, FilterMode.SrcAtop);
            }

            bar.Title = currentPage?.Title ?? string.Empty;

            if (_toolbar.NavigationIcon != null && !textColor.IsDefault)
            {
                var icon = _toolbar.NavigationIcon as DrawerArrowDrawable;
                if (icon != null)
                {
                    icon.Color = textColor.ToAndroid().ToArgb();
                }
            }

            UpdateTitleIcon();

            UpdateTitleView();
        }
        protected virtual void UpdateToolbar()
        {
            ActionBarDrawerToggle toggle = _drawerToggle;

            if (Toolbar == null || NavigationStack.Count == 0 || CurrentPage == null || VirtualView == null)
            {
                return;
            }

            bool isNavigated = NavigationStack.Count > 1;
            Page currentPage = CurrentPage;

            _defaultNavigationIcon ??= Toolbar.NavigationIcon;

            if (isNavigated)
            {
                if (NavigationPage.GetHasBackButton(currentPage))
                {
                    Toolbar.NavigationIcon ??= _defaultNavigationIcon;
                    if (toggle != null)
                    {
                        toggle.DrawerIndicatorEnabled = false;
                        toggle.SyncState();
                    }

                    var prevPage        = (Page)NavigationStack[NavigationStack.Count - 2];
                    var backButtonTitle = NavigationPage.GetBackButtonTitle(prevPage);

                    ImageSource image = NavigationPage.GetTitleIconImageSource(currentPage);
                    if (!string.IsNullOrEmpty(backButtonTitle))
                    {
                        Toolbar.NavigationContentDescription = backButtonTitle;
                    }
                    else if (image == null ||
                             Toolbar.SetNavigationContentDescription(image) == null)
                    {
                        Toolbar.SetNavigationContentDescription(Resource.String.nav_app_bar_navigate_up_description);
                    }
                }
                else if (toggle != null && _flyoutPage != null)
                {
                    toggle.DrawerIndicatorEnabled = _flyoutPage.ShouldShowToolbarButton();
                    toggle.SyncState();
                }
                else
                {
                    Toolbar.NavigationIcon = null;
                }
            }
            else
            {
                if (toggle != null && _flyoutPage != null)
                {
                    toggle.DrawerIndicatorEnabled = _flyoutPage.ShouldShowToolbarButton();
                    toggle.SyncState();
                    Toolbar.SetNavigationContentDescription(Resource.String.nav_app_bar_open_drawer_description);
                }
            }

            Color tintColor = NavigationView.BarBackgroundColor;

            if (tintColor == null)
            {
                Toolbar.BackgroundTintMode = null;
            }
            else
            {
                Toolbar.BackgroundTintMode = PorterDuff.Mode.Src;
                Toolbar.BackgroundTintList = ColorStateList.ValueOf(tintColor.ToNative());
            }

            Brush barBackground = NavigationView.BarBackground;

            Toolbar.UpdateBackground(barBackground);

            Color textColor = NavigationView.BarTextColor;

            if (textColor != null)
            {
                Toolbar.SetTitleTextColor(textColor.ToNative().ToArgb());
            }

            Color navIconColor = NavigationPage.GetIconColor(CurrentPage);

            if (navIconColor != null && Toolbar.NavigationIcon != null)
            {
                DrawableExtensions.SetColorFilter(Toolbar.NavigationIcon, navIconColor, FilterMode.SrcAtop);
            }

            Toolbar.Title = currentPage?.Title ?? string.Empty;

            if (Toolbar.NavigationIcon != null && textColor != null)
            {
                var icon = this.Toolbar.NavigationIcon as DrawerArrowDrawable;
                if (icon != null)
                {
                    icon.Color = textColor.ToNative().ToArgb();
                }
            }

            UpdateTitleIcon();
            UpdateTitleView();
            UpdateToolbarVisibility();
        }