以编程方式启用/禁用沉浸模式

问题描述:

我正在寻找使我的Android应用程序全屏,但只显示某个屏幕(我的设置屏幕)上的Android导航栏。我知道将导航栏永久隐藏在屏幕上是危险的,但我想知道这是否可行。我已经考虑过植入我的设备并使用Xposed框架。以编程方式启用/禁用沉浸模式

有没有办法以编程方式禁用导航栏或“粘滞模式”,并在以后重新启用?

编辑:我看了一下Android Immersive Mode,但它似乎像导航栏仍然会显示用户是否触摸边缘。我想删除任何提示的导航栏,直到他们进入我的设置屏幕。

是的,这是可能的。使用下面的代码片段来实现所需的功能。

// This snippet hides the system bars. 
private void hideSystemUI() { 
    // Set the IMMERSIVE flag. 
    // Set the content to appear under the system bars so that the content 
    // doesn't resize when the system bars hide and show. 
    View decorView = getWindow().getDecorView(); 
    decorView.setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar 
      | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar 
      | View.SYSTEM_UI_FLAG_IMMERSIVE); 
} 

// This snippet shows the system bars. It does this by removing all the flags 
// except for the ones that make the content appear under the system bars. 
private void showSystemUI() { 
    View decorView = getWindow().getDecorView(); 
    decorView.setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
} 

欲了解更多详情,请参阅在下面的谷歌文档:

https://developer.android.com/training/system-ui/immersive.html

编辑1:要隐藏其永久可能是你可以尝试这样的事情(哈克)

decorView.setOnSystemUiVisibilityChangeListener 
       (new View.OnSystemUiVisibilityChangeListener() { 
        @Override 
        public void onSystemUiVisibilityChange(int visibility) { 

          hideSystemUI(); 


        } 
       });` 
+0

感谢您的回复。在我发布之前,我正在看这个,但是我的Immersive Mode的问题是这样的:“用户可以沿着系统栏通常出现的区域向内滑动显示系统条”。这不会覆盖hide()吗?我想禁用,直到用户转到我的设置屏幕。 – Jason

+0

是的,事实上,第一次打开沉浸式模式时,用户会看到一个教程。这告诉他向下滑动将关闭全屏模式。 –

+0

对,我不希望他们关闭全屏模式*,除非*他们去我的其他屏幕之一。这就是我真正的问题所在。我想阻止用户完全访问导航栏,直到他们进入某个屏幕。 – Jason