public override void OnFragmentResumed(AndroidX.Fragment.App.FragmentManager fm, AndroidX.Fragment.App.Fragment f) { if (f is NavigationViewFragment pf) { _stackNavigationManager.OnNavigationViewFragmentResumed(fm, pf); } AToolbar?nativeToolbar = null; IToolbar?toolbar = null; if (_stackNavigationManager.NavigationView?.Toolbar is IToolbar tb && tb?.Handler?.NativeView is AToolbar ntb) { nativeToolbar = ntb; toolbar = tb; } // Wire up the toolbar to the currently made visible Fragment var controller = NavHostFragment.FindNavController(f); var appbarConfigBuilder = new AppBarConfiguration .Builder(_stackNavigationManager.NavGraph); if (nativeToolbar != null && toolbar != null && toolbar.Handler?.MauiContext != null) { if (toolbar.Handler is ToolbarHandler th) { th.SetupWithNavController(controller, _stackNavigationManager); } } }
public override void OnFragmentResumed(AndroidX.Fragment.App.FragmentManager fm, AndroidX.Fragment.App.Fragment f) { if (f is NavigationViewFragment pf) { _stackNavigationManager.OnNavigationViewFragmentResumed(fm, pf); } AToolbar?nativeToolbar = null; IToolbar?toolbar = null; if (_stackNavigationManager.NavigationView?.Toolbar is IToolbar tb && tb?.Handler?.NativeView is AToolbar ntb) { nativeToolbar = ntb; toolbar = tb; } // Wire up the toolbar to the currently made visible Fragment var controller = NavHostFragment.FindNavController(f); var appbarConfigBuilder = new AppBarConfiguration .Builder(_stackNavigationManager.NavGraph); if (nativeToolbar != null && toolbar != null) { // TODO: MAUI Hackey way of wiring up Drawer Layout // But currently you can only have a nav bar with a Navigation View if (nativeToolbar.Parent is DrawerLayout dl1) { appbarConfigBuilder = appbarConfigBuilder.SetOpenableLayout(dl1); } else if (nativeToolbar.Parent?.Parent is DrawerLayout dl2) { appbarConfigBuilder = appbarConfigBuilder.SetOpenableLayout(dl2); } else if (nativeToolbar.Parent?.Parent?.Parent is DrawerLayout dl3) { appbarConfigBuilder = appbarConfigBuilder.SetOpenableLayout(dl3); } var appbarConfig = appbarConfigBuilder.Build(); NavigationUI .SetupWithNavController(nativeToolbar, controller, appbarConfig); // the call to SetupWithNavController resets the Navigation Icon toolbar.Handler?.UpdateValue(nameof(IToolbar.BackButtonVisible)); if (toolbar.BackButtonVisible && toolbar.IsVisible) { // Wiring up to this will break the Drawer Toggle button if it's visible nativeToolbar.SetNavigationOnClickListener(_stackNavigationManager.BackClick); } } }
private void SetupNavigation() { var bottomNavigationView = FindViewById <BottomNavigationView>(Resource.Id.main_bottom_navigation_view); NavHostFragment navHostFragment = (NavHostFragment)SupportFragmentManager .FindFragmentById(Resource.Id.fragNavHost); NavigationUI.SetupWithNavController( bottomNavigationView, navHostFragment.NavController); }
public override void OnFragmentViewCreated(AndroidX.Fragment.App.FragmentManager fm, AndroidX.Fragment.App.Fragment f, AView v, Bundle savedInstanceState) { base.OnFragmentViewCreated(fm, f, v, savedInstanceState); var controller = NavHostFragment.FindNavController(f); var appbarConfig = new AppBarConfiguration .Builder(controller.Graph) .Build(); // These have to get called/wired up every time a new fragment view is created // I'm not clear why this can't just be done once NavigationUI .SetupWithNavController(_navigationManager.Toolbar, controller, appbarConfig); _navigationManager.Toolbar.SetNavigationOnClickListener(_navigationManager.BackClick); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.navigation_activity); AndroidX.AppCompat.Widget.Toolbar toolbar = FindViewById <AndroidX.AppCompat.Widget.Toolbar>(Resource.Id.toolbar); SetSupportActionBar(toolbar); NavHostFragment host = SupportFragmentManager.FindFragmentById(Resource.Id.my_nav_host_fragment) as NavHostFragment; NavController navController = host.NavController; int[] topLevelDestinationIds = new int[] { Resource.Id.home_dest }; appBarConfiguration = new AppBarConfiguration.Builder(topLevelDestinationIds).SetDrawerLayout(FindViewById <DrawerLayout>(Resource.Id.drawer_layout)).Build(); SetupActionBar(navController, appBarConfiguration); SetupNavigationMenu(navController); SetupBottomNavMenu(navController); navController.AddOnDestinationChangedListener(this); }
public override void OnViewCreated(AView view, Bundle savedInstanceState) { base.OnViewCreated(view, savedInstanceState); var controller = NavHostFragment.FindNavController(this); var appbarConfig = new AppBarConfiguration .Builder(controller.Graph) .Build(); NavigationUI .SetupWithNavController(NavDestination.NavigationPageHandler.Toolbar, controller, appbarConfig); HasOptionsMenu = true; NavDestination.NavigationPageHandler.Toolbar.SetNavigationOnClickListener(BackClick); UpdateToolbar(); NavDestination.NavigationPageHandler.Toolbar .Title = NavDestination.Page.Title; if (Context.GetActivity() is AppCompatActivity aca) { aca.SupportActionBar.Title = NavDestination.Page.Title; // TODO MAUI put this elsewhere once we figure out how attached property handlers work bool showNavBar = false; if (NavDestination.Page is BindableObject bo) { showNavBar = NavigationPage.GetHasNavigationBar(bo); } var appBar = NavDestination.NavigationPageHandler.AppBar; if (!showNavBar) { if (appBar.LayoutParameters is CoordinatorLayout.LayoutParams cl) { cl.Height = 0; appBar.LayoutParameters = cl; } } else { if (appBar.LayoutParameters is CoordinatorLayout.LayoutParams cl) { cl.Height = ActionBarHeight(); appBar.LayoutParameters = cl; } } } int ActionBarHeight() { int attr = Resource.Attribute.actionBarSize; int actionBarHeight = (int)Context.GetThemeAttributePixels(Resource.Attribute.actionBarSize); //if (actionBarHeight <= 0) // return Device.Info.CurrentOrientation.IsPortrait() ? (int)Context.ToPixels(56) : (int)Context.ToPixels(48); //if (Context.GetActivity().Window.Attributes.Flags.HasFlag(WindowManagerFlags.TranslucentStatus) || Context.GetActivity().Window.Attributes.Flags.HasFlag(WindowManagerFlags.TranslucentNavigation)) //{ // if (_toolbar.PaddingTop == 0) // _toolbar.SetPadding(0, GetStatusBarHeight(), 0, 0); // return actionBarHeight + GetStatusBarHeight(); //} return(actionBarHeight); } }