在使用 Android Navigation 组件时设置 Fragment 全屏显示

3

我最近将我的应用程序转换为单一活动结构,尝试将一个特定的片段设置为全屏。标准的全屏代码对于片段无效。

final int flags =
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

我发现了这篇Android set full screen from fragment的文章,但是将其设置为FLAG_LAYOUT_NO_LIMITS会导致PagerSnapHelper在片段之间切换时跳动。因此,我的问题是,是否有其他方法可以将片段设置为全屏,而不使用FLAG_LAYOUT_NO_LIMITS。

你根本不需要FLAG_LAYOUT_NO_LIMITS。你为什么认为你需要它呢? - ianhanniballake
所以基本上添加标志 final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN .... 隐藏状态栏和导航栏。但不会缩放片段以填充空间。这是因为我在活动顶部布局中使用了fitsSystemWindows="true"。通过编程将其设置为false对片段没有影响。 - Saravana Gunaseelan
那么为什么你在活动级别使用fitsSystemWindows="true",而实际上你只想将其应用于特定的片段呢? - ianhanniballake
我在活动中有一个BottomNavigationView,它应该适应系统窗口。当进入全屏片段时,我会隐藏BottomNavigationView。 - Saravana Gunaseelan
fitsSystemWindowsBottomNavigationView 上不会影响片段是否 fitsSystemWindows - ianhanniballake
我在activity_main的主视图中有fitsSystemWindows。实际上,我发现我需要在活动中使用fitsSystemWindows,因为我将MainActivity的主题设置为<item name="android:windowTranslucentNavigation">true</item>。我不再需要它了。删除后问题解决了。我不再需要在活动中使用fitsSystemWindows。默认情况下,所有片段都适应窗口大小,对于全屏片段,只需更新标志即可拉伸。感谢您的帮助!如果浪费了您的时间,我很抱歉! - Saravana Gunaseelan
2个回答

6

您不应该使用FLAG_LAYOUT_NO_LIMITS,也不应该在活动层全局应用fitsSystemWindows="true" - 这会阻止您的片段进入全屏模式。相反,只需将fitsSystemWindows添加到可能与状态/系统栏重叠的片段/单个组件即可。这将确保您的全屏片段能够占据整个屏幕大小,而不会从边缘处缩进。


0
以下是在片段中对我有效的最简单解决方案:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}

也在onDestroy中清除标志,如下所示:
override fun onDestroy() {
    super.onDestroy()
    activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接