2012-05-04 12 views
19

Ich weiß, dass ich die ActionBar Overlay requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY) mit machen kann
und/wechselt die Statusleiste in meinem Bildschirm zeigt (von zwischen FLAG_FULLSCREEN und FLAG_FORCE_NOT_FULLSCREEN schaltend).
Das funktioniert großartig. Ich möchte jedoch nicht, dass sich mein Layout bewegt, wenn ich die Statusleiste umschalte.Android statusbar Overlay mit ActionBar

Ich weiß, dass ich die Statusleiste „Overlay“ machen (wenn auch nicht transparent), um den Inhalt mit:

WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

Dies auch große Werke, mit Ausnahme der (erwarteten) Folge, dass, Bei Verwendung einer ActionBar wird die ActionBar halb abgeschnitten - die Hälfte davon befindet sich grundsätzlich unter der Statusleiste.

So frage ich mich, gibt es eine Möglichkeit, "die ActionBar" um die Höhe der Statusleiste in diesem Fall zu verschieben?
Ich weiß, dass im schlimmsten Fall kann ich dies mit einer benutzerdefinierten Ansicht, die innerhalb des Layouts lebt, aber ich tue dies nicht (will von der ActionBar profitieren).

danke!

+0

Es ist nicht die Statusleiste während versteckt zeigen Symbolleiste empfohlen. – zgulser

Antwort

4

so offensichtlich, können Sie dies in Jellybean tun. google enthält zwei Beispiele in den api-Dokumenten. Hier ist ein Link: http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility%28int%29

zusammenfassung: verwenden auf eine sicht um die sichtbarkeit (auf jellybean +) zu wechseln.

+0

Wie kann dies in ICS erreicht werden, jede Idee? –

+1

ohne Ihre eigenen actionbar (benutzerdefinierte Implementierung, die nicht im Fenster Dekoration Bereich festgelegt), ich weiß nicht, ob dies machbar ist Am nächsten kommt die Antwort von David Scott. – ahmedre

0

Warum nicht Sie machen es im Manifest

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

als Sie keine statusbar und mehr Platz für die ActionBar haben ??

+0

danke, aber da dies eine Lese-App ist, möchte ich, dass der Benutzer die Zeit kennt, wenn sie auf den Bildschirm tippen, und mein Layout sonst Vollbild sein soll. – ahmedre

3

Es ist nicht perfekt, aber das ist, wie ich erreicht haben, was Sie wollen:

In onCreate.

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

Dann:

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

} 

Ich habe auch einen Stil auf die Aktivität mit den folgenden:

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

Ihre Tätigkeit verschiebt sich nach unten, wenn die Statusleiste zeigt, aber ich weiß nicht denke, es ist zu auffällig.

+0

danke David - leider, das war schon das, was ich hatte - ich versuchte zu verhindern, dass die Aktivität nach unten verschoben. Ich schätze, die einzige Möglichkeit ist, ein benutzerdefiniertes Layout als Aktionsleiste zu verwenden und die Uhr einfach auf Überlagerung zu setzen, anstatt eine echte Aktionsleiste zu verwenden :( – ahmedre

+0

Ihre Methode 'hideStatusBar()' arbeitet robuster als 'setSystemUiVisibility' in Verbindung mit der ActionBar aus Kompatibilitäts-Paket – OneWorld

0

Setzen Sie diese Methode in onCreate() -Methode Aktivität:

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

verweisen: link