20

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

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

WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

这也很好用,除了(预期的)结果,当使用 ActionBar 时,ActionBar 被截断了一半——它的一半基本上位于状态栏下方。

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

谢谢!

4

4 回答 4

4

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

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

于 2012-08-07T09:00:04.470 回答
3

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

在 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> 

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

于 2012-05-29T13:18:28.167 回答
0

为什么你不在清单中

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

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

于 2012-05-04T07:11:49.150 回答
0

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

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

参考:链接

于 2016-02-17T06:57:07.297 回答