首页 > 解决方案 > 单个片段上的 Android 沉浸式全屏模式

问题描述

我正在尝试在我的 3 个片段之一上应用沉浸式全屏,就像教程中给出的那样:

private void hideSystemUI() {
    // Enables regular immersive mode.
    // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
    // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
    View decorView = getActivity(). getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            // Hide the nav bar and status bar
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

并从片段的方法中调用该 onCreateView方法。

我希望这只会影响片段,而是影响所有片段。

如何强制沉浸式屏幕仅影响屏幕单个片段?

标签: androidandroid-fragments

解决方案


您将沉浸式模式应用于活动的装饰视图,据我所知,您有一个活动应用程序,因此它适用于您的“根”活动。尝试在破坏片段时退出沉浸模式。例如:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
//...
    Handler().post {
        activity?.window?.decorView?.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN
            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
        }
//...
}

//...

override fun onDestroyView() {
//...
    Handler().post {
        activity?.window?.decorView?.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE
    }
    super.onDestroyView()
}

推荐阅读