首页 > 解决方案 > 如何制作一个深度片段以在屏幕上使用喷气背包导航和 BottomNavigationView 占据整个屏幕?

问题描述

我在https://github.com/android/architecture-components-samples/tree/master/NavigationAdvancedSample研究了谷歌示例。它的工作原理如下:

在此处输入图像描述

在此处输入图像描述

但我需要关于片段来占据整个屏幕。最佳实践是什么?

我试过这个: activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.root_activity,Detail())?.addToBackStack("About")?.commit()

得到这个:

在此处输入图像描述

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/root_activity"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android.navigationadvancedsample.MainActivity">

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_nav"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:menu="@menu/bottom_nav"/>

我可以设置activity?.findViewById<BottomNavigationView>(R.id.bottom_nav)?.visibility=View.GONE oractivity?.findViewById<BottomNavigationView>(R.id.bottom_nav)?.visibility=View.INVISIBLE 但是当它回来时,它看起来像这样,我认为这不是好方法: 在此处输入图像描述

谢谢!!

标签: androidandroid-fragmentsnavigation-drawerbottomnavigationviewandroid-jetpack

解决方案


您必须切换 BottomNavigationView 的可见性,如下所示:

NavController.OnDestinationChangedListener destinationChangedListener = new NavController.OnDestinationChangedListener() {
        @Override
        public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
            if(destination.getId() == R.id.navigation_notifications){
                navView.setVisibility(View.GONE);
            }else{
                navView.setVisibility(View.VISIBLE);
            }

        }
    };
    navController.addOnDestinationChangedListener(destinationChangedListener); 

推荐阅读