Exemplo n.º 1
0
            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);
                    }
                }
            }
Exemplo n.º 2
0
            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);
        }
Exemplo n.º 4
0
            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);
        }
Exemplo n.º 6
0
        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);
            }
        }