简体   繁体   English

如何制作一个深度片段以在屏幕上使用喷气背包导航和BottomNavigationView来占据整个屏幕?

[英]how to make a deep fragment to take the whole screen with a jetpack navigation and BottomNavigationView on screen?

I study the google example at https://github.com/android/architecture-components-samples/tree/master/NavigationAdvancedSample .And it works like this :我在https://github.com/android/architecture-components-samples/tree/master/NavigationAdvancedSample研究谷歌示例。它的工作原理是这样的:

在此处输入图片说明

在此处输入图片说明

But I need the about fragment to take the whole screen.What is best practice?但我需要关于片段来占据整个屏幕。最佳实践是什么?

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

and get this:得到这个:

在此处输入图片说明

the activity_main.xml:活动_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"/>

I can set activity?.findViewById<BottomNavigationView>(R.id.bottom_nav)?.visibility=View.GONE or activity?.findViewById<BottomNavigationView>(R.id.bottom_nav)?.visibility=View.INVISIBLE But when it comes back,it looks like this,I think this is not good way:我可以设置activity?.findViewById<BottomNavigationView>(R.id.bottom_nav)?.visibility=View.GONE还是activity?.findViewById<BottomNavigationView>(R.id.bottom_nav)?.visibility=View.INVISIBLE回来,看起来像这样,我认为这不是好方法: 在此处输入图片说明

thanks!!谢谢!!

You have to toggle visibility of BottomNavigationView as shown below:您必须切换 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); 

in case anybody has ths same question,I post my answer here.如果有人有同样的问题,我在这里发布我的答案。

to work around ,I put BottomNavigationView into a MainFragment instead of MainActivity .为了解决这个问题,我将 BottomNavigationView 放入 MainFragment 而不是 MainActivity 。 And in the MainActivity dynamically instantiate the MainFragment,so I can replace the MainFragment as a whole in my deep child fragment .并且在 MainActivity 中动态实例化 MainFragment,这样我就可以在我的深子片段中整体替换 MainFragment 。

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val container = FrameLayout(this)
    container.id = R.id.activity_container
    setContentView(container)
    supportFragmentManager.beginTransaction().replace(R.id.activity_container,MainFragment()).commit()
}

} }

in the nested fragment : activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.activity_container,About())?.addToBackStack("Abouts")?.commit()在嵌套片段中: activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.activity_container,About())?.addToBackStack("Abouts")?.commit()

final effect(have strip away the toolbar):最终效果(去掉工具栏): 在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM