在android kitkat中使用新的IMMERSIVE模式

我想做一个活动进入IMMERSIVE模式,并尽快隐藏顶部和button系统栏。

android的开发人员站点,他们说我应该使用setSystemUiVisibility()并提供SYSTEM_UI_FLAG_IMMERSIVESYSTEM_UI_FLAG_HIDE_NAVIGATION

我怎样才能在活动的OnCreate()方法中做到这一点? 我认为setSystemUiVisibility没有在Activity类中提供,它应该在视图中发生。 有没有解决方法?

UPDATE

好根据门户我添加了以下几行,但我没有看到任何改变,导航栏和button仍然可见:

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { } getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE); } //Rest of activity code 

  • getHeight for View有可视性=消失
  • 如何清除视图中所有可选元素的焦点?
  • 键盘显示时,DialogFragment不会resize
  • Android View.scrollTo(x,y)在哪里滚动到?
  • 如何将SearchView的inputtypes设置为数字
  • CoordinatorLayout中的ViewPager覆盖API> = 21的其他视图
  • 如何显示双色背景的文字?
  • Android windowSoftInputMode =“adjustPan”滚动一些
  • 获取装饰视图:

     getWindow().getDecorView().setSystemUiVisibility(...) 

    请记住,参数是位标志。 只调用一次上面的方法:

     getWindow().getDecorView().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 | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE); 

    Chris Banes的主旨展示了一个漂亮的助手类,我们可以使用它来设置从HoneyComb到棒棒堂的所有版本的沉浸模式https://gist.github.com/chrisbanes/73de18faffca571f7292

    更新:我试图从他的github回购包括在我的项目中,但我不得不将gist文件克隆到我的项目,并调整包名称。 如果有人知道如何正确包含它作为依赖,我们欢迎你来帮助我。

    我在我的FullScreenActivity中添加了它,我想用这样的ImmersiveStickyMode:

     @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); final int flags = 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 | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; SystemUiHelper uiHelper = new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE ,flags); uiHelper.hide(); } 

    您可以创build全局function以进入身临其境的模式,如:

     public static void enableImmersiveMode(final View decorView) { decorView.setSystemUiVisibility(setSystemUiVisibility()); decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { decorView.setSystemUiVisibility(setSystemUiVisibility()); } } }); } public static int setSystemUiVisibility() { return 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 | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } 

    以上代码还将控制系统UI可见性变化。 希望这会帮助你。

    威廉·J·弗朗西斯 :

      public class GameActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); /* my code you dont need this assets=getAssets(); sGame= new GameView(this, GAME_WIDTH, GAME_HEIGHT); setContentView(sGame); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); */ getWindow().getDecorView().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_STICKY); } @Override protected void onDoSomethingOtherImportantThing(){ ... } } 

    已经给出了答案,但这里是如何利用Immersive模式。

    在你的活动中:

    就在setContentview()之前…….

    调用方法:toggleHideyBar();

    按照从开发人员的Android文档文档 ,并复制此方法在您的活动。