2012-05-04 18 views
19

wiem, że mogę zrobić nakładkę ActionBar użyciu requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY)
i może przełączać/pokaż pasek stanu w moim ekranie (przełączając pomiędzy FLAG_FULLSCREEN i FLAG_FORCE_NOT_FULLSCREEN).
Działa to świetnie. Jednak nie chcę, aby mój układ się poruszał, gdy przełączam pasek stanu.Android statusbar nakładka z ActionBar

wiem, że mogę zrobić pasek stanu „overlay” (choć nie w sposób przejrzysty) zawartości przy użyciu:

WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

Działa to również wspaniałe, z wyjątkiem (oczekiwany) skutkuje tym, podczas korzystania z paska akcji pasek ActionBar zostaje połowicznie odcięty - połowa z nich znajduje się pod paskiem stanu.

Zastanawiam się, czy istnieje sposób, aby "przesunąć pasek w dół" o wysokość paska stanu w tym przypadku?
Wiem, że w gorszym przypadku mogę to zrobić z niestandardowym widokiem, który żyje w układzie, ale raczej tego nie robię (chcę korzystać z paska akcji).

dziękuję!

+0

Nie jest zalecane, aby wyświetlić pasek narzędzi podczas ukrywanie paska stanu. – zgulser

Odpowiedz

4

Najwyraźniej możesz to zrobić w Jellybean. Google zawiera dwa przykłady w dokumentach API. tutaj jest link: http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility%28int%29

podsumowanie: użyć setSystemUiVisibility na widoku, aby włączyć widoczność (na jellybean +).

+0

W jaki sposób można to osiągnąć w ICS, każdy pomysł? –

+1

bez użycia własnego paska czynności (niestandardowa implementacja, która nie jest ustawiona w obszarze dekoracji okna), nie wiem, czy jest to wykonalne. najbliżej można znaleźć odpowiedź Davida Scotta poniżej. – ahmedre

0

Dlaczego nie robisz to w manifeście

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

niż nie masz pasek stanu i więcej miejsca dla Actionbar ??

+0

dziękuję, ale ponieważ jest to aplikacja do czytania, chcę, aby użytkownik poznał czas dotknięcia ekranu i chciałby, aby mój układ był pełnoekranowy w przeciwnym razie. – ahmedre

3

To nie jest idealne, ale jest to w jaki sposób udało mi się osiągnąć to, co chcesz:

W onCreate.

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

Następnie:

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

} 

Mam też styl na działalność z następujących czynności:

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

Twoja aktywność będzie przesunięcie w dół, gdy status pokazy bar, ale nie wiem myślę, że to zbyt zauważalne.

+0

dziękuję Davidowi - niestety, to było już to, co miałem - starałem się zapobiec przesunięciu aktywności. Myślę, że jedynym sposobem, aby to zrobić, jest użycie niestandardowego układu jako paska akcji i ustawienie zegara tak, aby nakładał się zamiast używania prawdziwego paska akcji :( – ahmedre

+0

Twoja metoda 'hideStatusBar()' działa bardziej solidnie niż 'setSystemUiVisibility' w połączeniu z ActionBarem z pakietu kompatybilności – OneWorld

0

umieścić tę metodę w onCreate aktywność() metoda:

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

patrz: link