android-fragments 隐藏系统栏并以片段方式全屏显示

b1uwtaje  于 2022-11-13  发布在  Android
关注(0)|答案(3)|浏览(169)

我一直在尝试做一个片段全屏,但是网上几乎每个答案都有弃用的方法,甚至android官方网站也有弃用的方法Link
我正在使用Kotlin,在遵循this的答案后,我已经尝试了这个片段。

override fun onAttach(context: Context) {
    super.onAttach(context)
    requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}

override fun onDetach() {
    super.onDetach()
    requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}

但我得到的结果是

您可以清楚地看到导航栏和状态栏仍然存在。
你能分享正确的和最新的方法来获得全屏的片段?

4si2a6ki

4si2a6ki1#

如果您阅读了ViewCompat.getWindowInsetsController()的文档,您会发现它只是因为他们希望您使用getInsetsController()而被弃用。否则,示例代码就可以正常工作。

cu6pst1q

cu6pst1q2#

你可以使用主题如下

<style name="AppTheme"parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    </style>
mzaanser

mzaanser3#

用于使片段全屏显示。

override fun onAttach(context: Context) {
    super.onAttach(context)
    WindowInsetsControllerCompat(requireActivity().window, requireActivity().window.decorView).apply { 
        
        // Hide both the status bar and the navigation bar
        hide(WindowInsetsCompat.Type.systemBars())
        
        // Behavior of system bars 
        systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    }
}

确保在你的代码片段中也添加这段代码,它会再次显示系统栏。

override fun onDetach() {
    super.onDetach()
    WindowInsetsControllerCompat(requireActivity().window, requireActivity().window.decorView)
        .show(WindowInsetsCompat.Type.systemBars())
}

我不知道WindowsInsetsControllerCompat是如何工作的,但如果有人想隐藏系统栏,这将有所帮助。

相关问题