在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 

Solutions Collecting From Web of "在android kitkat中使用新的IMMERSIVE模式"

获取装饰视图:

 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文档文档 ,并复制此方法在您的活动。