Android状态栏覆盖ActionBar

时间:2012-05-04 06:56:41

标签: android android-actionbar actionbarsherlock

我知道我可以使用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中受益)。

谢谢!

4 个答案:

答案 0 :(得分:4)

显然,你可以在Jellybean中做到这一点。谷歌在api文档中包含两个例子。这是一个链接:http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility%28int%29

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

答案 1 :(得分:3)

这并不完美,但这就是我达到你想要的目标:

on 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);

}

我还在活动上有一个样式,其中包含以下内容:

 <style name="readingStyle" parent="@style/Theme.Sherlock">
     <item name="android:windowActionBarOverlay">true</item>  
     <item name="windowActionBarOverlay">true</item>       
 </style> 

状态栏显示时,您的活动会降低,但我认为这不太明显。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

参考:link