android-fragments 如何在另一个片段中取消UI全屏?

zzzyeukh  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(107)

所以我有一个包含4个片段的Activity,计划是使用(activity as AppCompatActivity).getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)在状态栏之外创建全屏的第一个片段。这是一个成功的例子,但随后其余的片段也遵循这个模式。
我试着用(activity as AppCompatActivity).getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE),但是还是不行。相反,现在状态栏和操作栏之间有一个间隙。并且布局和操作栏重叠。
我尝试使用(activity as AppCompatActivity).getWindow().getDecorView().setSystemUiVisibility( View.GONE),但是现在状态栏的高度变成了两倍,并且状态栏上有一个空的第二行。布局仍然与操作栏重叠。
我还在第一个布局中设置了android:fitSystemWindows="false"
使用(activity as AppCompatActivity).supportActionBar?.show()工具栏时仍与项重叠。

  • 谢谢-谢谢
xyhw6mcr

xyhw6mcr1#

通过使用

(activity as AppCompatActivity).getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)

您正在设置Activity的系统UI可见性,这是您的所有片段都全屏布局的原因。您可以使用片段的根视图来全屏布局。如果您使用视图绑定或数据绑定,则可以如下所示使用

_binding!!.root.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

请注意,以上代码使用的是Kotlin语言。
由于不赞成使用systemUiVisibility api,因此我们可以使用一个行程序代码。
在OnCreateView()中您要布局的片段完全使用

WindowCompat.setDecorFitsSystemWindows(requireActivity().window,false)

而在你不想完全铺陈的片段上,只要传递真

WindowCompat.setDecorFitsSystemWindows(requireActivity().window,true)

相关问题