如何撤消对窗口装饰视图的更改?

hel*_*rld 5 android android-fragments android-view android-fullscreen android-statusbar

我的活动中有两个片段,fA 和 fB。当我单击 fA 中的按钮时,fB 会替换 fA。fB 就像 Google Play 商店视图一样,当您打开查看某些应用程序时。该图像位于透明状态栏下方。我通过将以下代码添加到 fB#onCreateView 来做到这一点:

    Window w = getActivity().getWindow();
    w.getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    w.setStatusBarColor(Color.TRANSPARENT);
Run Code Online (Sandbox Code Playgroud)

当我按返回时,fB被删除并被fA取代,一切正常,但工具栏位于状态栏下方。喜欢:

在此输入图像描述

然而,它应该看起来像: 在此输入图像描述

这就是片段首次加载时的样子。

有什么办法可以清除我在 fB 中设置的标志吗?我尝试将此代码放入片段的 onResume 中,但没有成功!

    w.getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    |View.SYSTEM_UI_FLAG_VISIBLE);
Run Code Online (Sandbox Code Playgroud)

而且,我也尝试过:

    w.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    w.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以解决这个问题吗?谢谢你!

Pou*_*ari 3

我想现在回答这个问题有点晚了。在片段的 onDestroy 方法中写入以下代码行:

显示状态栏:

requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
Run Code Online (Sandbox Code Playgroud)

显示导航栏:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
Run Code Online (Sandbox Code Playgroud)