Android从片段设置全屏

Val*_*rio 4 java android

这是我的问题:我有一个Android应用程序,允许用户全屏显示,以提高可读性。全屏fab切换按钮放置在实际上包含读数的片段内。

使它变得简单:

  • 主要活动包含阅读片段
  • Readings Fragment包含一个fab按钮以切换全屏

要触发全屏,请使用以下代码段:

this.fullScreenFab.setOnClickListener(v -> {
    WindowManager.LayoutParams attrs = getActivity().getWindow().getAttributes();
    if (this.isFullScreen) {
        this.isFullScreen = false;
        ((AppCompatActivity) 
getActivity()).getSupportActionBar().show();
    getActivity().getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

} else {
    this.isFullScreen = true;
    ((AppCompatActivity) getActivity()).getSupportActionBar().hide();
    getActivity().getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LOW_PROFILE
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

}
getActivity().getWindow().setAttributes(attrs);
});
Run Code Online (Sandbox Code Playgroud)

现在,它可以很好地工作,除了状态栏和操作栏的空间一直显示。该活动进入FS(甚至Android对此也发出警告),但是仍然保留了这两个元素所占用的空间。

全屏禁用 全屏禁用

全屏启用 全屏启用

如您所见,FS占据了顶部和底部,因此该片段并没有真正的全屏显示。

片段具有

android:fitsSystemWindows="true"
Run Code Online (Sandbox Code Playgroud)

请发送帮助!提前致谢。瓦列里奥

Rai*_*ker 11

您应尝试使用此标志,因为它旨在删除状态栏和导航。

getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
Run Code Online (Sandbox Code Playgroud)

注意:您需要在切换或关闭片段时手动清除它。否则,该全屏显示将一直适用,直到父活动存在为止。为此,

getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
Run Code Online (Sandbox Code Playgroud)

另外,您可以使用FLAG_FULLSCREEN。使用它可以有效地设置透明的通知栏,但状态栏上的图标仍会显示。

  • 谢谢你,你的片段成功了。使用 .clearFlags 我可以恢复到原始设置。 (2认同)

Sum*_*ain 7

科特林

onViewCreated()使片段全屏

requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
Run Code Online (Sandbox Code Playgroud)

onDetach()以全屏清晰的标志,这样就不会影响到其他片段,该片段是在活动开启

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

--x--x--x--x--x--x--x--x--x--

爪哇

onViewCreated()使片段全屏

requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
Run Code Online (Sandbox Code Playgroud)

onDetach()以全屏清晰的标志,这样就不会影响到其他片段,该片段是在活动开启

requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
Run Code Online (Sandbox Code Playgroud)