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(); }