Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android statusbar overlay with ActionBar

I know that I can make the ActionBar overlay using requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY)
and can toggle/show the status bar in my screen (by switching between FLAG_FULLSCREEN and FLAG_FORCE_NOT_FULLSCREEN).
This works great. However, I don't want my layout moving when I toggle the status bar.

I know that I can make the status bar "overlay" (albeit not transparently) the content using:

WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

This works also great, except for the (expected) consequence that, when using an ActionBar, the ActionBar gets half cut off - half of it is under the status bar basically.

So I am wondering, is there a way to "move the ActionBar down" by the status bar's height in this case?
I know that in worse case, I can do this with a custom view that lives within the layout, but I rather not do this (want to benefit from the ActionBar).

thanks!

like image 876
ahmedre Avatar asked May 04 '12 06:05

ahmedre


People also ask

How to hide status bar in Android programmatically?

Hide the Status Bar on Android 4.View decorView = getWindow(). getDecorView(); // Hide the status bar.


2 Answers

so apparently, you can do this in Jellybean. google includes two examples in the api docs. here is a link: http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility%28int%29

summary: use setSystemUiVisibility on a view to toggle visibility (on jellybean+).

like image 61
ahmedre Avatar answered Nov 04 '22 23:11

ahmedre


It's not perfect, but this is how I have achieved what you want:

In onCreate:

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

Then:

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

}

I also have a style on the activity with the following:

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

Your activity will shift down when the status bar shows, but I don't think it's too noticeable.

like image 3
David Scott Avatar answered Nov 04 '22 23:11

David Scott