更新:我不再推荐这种方法。对于小型应用程序,它可能对您有用,但是当我试图在托管在不同的
NavHostFragments
. 我认为最简单的方法是在顶层布局中隐藏片段以允许全屏查看。您可以添加
addOnDestinationChangedListener
监听你想要全屏显示的目的地,并简单地隐藏所需的片段。
原始答案:
我在我的应用程序中这样做,效果很好。您应该用
main_nav_graph.xml
. 例如:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/main_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout>
然后,全屏片段的导航将如下所示:
<navigation 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:id="@+id/main_nav_graph.xml"
app:startDestination="@id/main_fullscreen">
<fragment
android:id="@+id/main_fullscreen"
android:name="com.example.myapplication.MainFullscreen" >
<action
android:id="@+id/action_main_fullscreen_to_fullscreen2"
app:destination="@id/fullscreen2" />
</fragment>
<fragment
android:id="@+id/fullscreen2"
android:name="com.example.myapplication.Fullscreen2" />
</navigation>
其中主全屏有一个类似于您提供的ConstraintLayout的布局。你要确保
app:defaultNavHost="true"
给你所有的孩子。
然后,当我想从blankFragment1导航到fullscreen2时,我称之为:
Navigation.findNavController(activity!!, R.id.main_host_fragment).navigate(R.id.action_main_fullscreen_to_fullscreen2)
当然,如果导航图除了在同一个活动中之外没有实际连接,那么拥有导航图就没什么意义了,但是我喜欢导航图在导航编辑器中给你的应用程序的漂亮图片:)