如何在Oreo中禁用状态栏?

时间:2018-09-10 05:35:49

标签: android system-alert-window

与禁用状态栏有关的问题很多。

我尝试过这种方式。但是在Android 8.0中不起作用。

因为根据Google文档

警告窗口 如果某个应用使用SYSTEM_ALERT_WINDOW权限并使用以下窗口类型之一尝试在其他应用和系统窗口上方显示警报窗口:

TYPE_PHONE
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_SYSTEM_OVERLAY
TYPE_SYSTEM_ERROR

...然后这些窗口将始终显示在使用TYPE_APPLICATION_OVERLAY窗口类型的窗口下方。如果某个应用程序针对Android 8.0(API级别26),则该应用程序将使用TYPE_APPLICATION_OVERLAY窗口类型来显示警报窗口。

我已经尝试过https://docs.opencv.org/3.3.0/da/d22/tutorial_py_canny.html 但这仅在Android 8.0以下有效。

  

如何在Android 8.0中禁用状态栏?

2 个答案:

答案 0 :(得分:0)

您尝试过带有标志SYSTEM_UI_FLAG_FULLSCREEN的事情吗?

由于我不确定您要寻找的是什么,因此我将尝试给出一个通用的答案,您可以对用例进行调整。希望对您有所帮助。

  

在这里播放不同的标志,看看您需要什么。听起来,您可能只需要最后一个标志-除非您也希望隐藏导航-那么您可能需要设置最后两个标志。

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 = 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
    );
}
  

然后通过像这样覆盖onWindowFocusChanged( ... )方法来采用并实现此新方法。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    if (hasFocus) {
        hideSystemUI();
    }
}

也许您甚至想尝试在应用程序的哪种情况或状态下使用一些标志添加一些逻辑。

Google的文档是一如既往的另一个绝佳资源。有关控制系统UI可见性here的很好的信息。

答案 1 :(得分:0)

在此处查看答案。我们无法在Oreo中阻止状态栏。只有使用服务才能关闭。

https://stackoverflow.com/a/56292743/3405508