Android状态栏与ActionBar重叠

我知道我可以使用requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY)制作ActionBar叠加层
并且可以在我的屏幕中切换/显示状态栏(通过在FLAG_FULLSCREENFLAG_FORCE_NOT_FULLSCREEN之间切换)。
这很好用。 但是,当我切换状态栏时,我不希望我的布局移动。

我知道我可以使用以下内容使状态栏“覆盖”(尽管不透明)内容:

WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

这也很好,除了(预期的)后果,当使用ActionBar时,ActionBar被截止一半 – 其中一半基本上在状态栏下。

所以我想知道,在这种情况下,有没有办法通过状态栏的高度“移动ActionBar”?
我知道在更糟糕的情况下,我可以使用位于布局中的自定义视图来执行此操作,但我宁愿不这样做(希望从ActionBar中受益)。

谢谢!

  • 如何向Android活动添加底部菜单
  • 带有actionLayout的Android操作栏菜单项无法正常工作
  • 为什么我的Activity扩展ActionBarActivity?
  • 带片段的ActionBar(支持)(支持)
  • Android的appcompat操作栏菜单项showAsAction不工作
  • 如何检测ActionBar标题上的点击?
  • 如何向工具栏添加溢出菜单?
  • 如何使我的ActionBar的“向上”按钮像手机的“后退”按钮一样工作?
  • 显然,你可以在Jellybean中做到这一点。 谷歌在api文档中包含两个示例。 这是一个链接: http : //developer.android.com/reference/android/view/View.html#setSystemUiVisibility%28int%29

    摘要:在视图上使用setSystemUiVisibility来切换可见性(在jellybean +上)。

    它并不完美,但这就是我实现你想要的方式:

    在onCreate:

    getWindow()setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN)。

    然后:

     private void hideStatusBar() { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); } private void showStatusBar() { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } 

    我还对活动有一种风格,具体如下:

       

    当状态栏显示时,您的活动将向下移动,但我认为它不太明显。

    你为什么不在Manifest中做到这一点

     android:theme="@android:style/Theme.Black.NoTitleBar" 

    比没有状态栏和Actionbar更多的空间?

    将此方法放在onCreate()方法活动中:

     getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 

    参考: 链接