2013-04-30 6 views
21

enter image description hereJak ukryć pasek klawiszy na telefonie z systemem Android?

Kiedy moja aplikacja się uruchamia, chciałabym ukryć pasek klawiszy programowalnych (w czerwonym prostokącie), aby mieć większy ekran.

  1. Jak mogę to ukryć?

  2. Czy muszę wyświetlać pasek celowo po zamknięciu aplikacji? Czy przywróci się automatycznie po zamknięciu aplikacji?

Android 4.1, bez kluczy sprzętowych z przodu telefonu.

+0

możliwe duplikat [Ukryj pasku systemowym w tabletkach] (http://stackoverflow.com/questions/12605266/hide-system-bar-in-tablet) – jprofitt

+0

Ewentualnie pomocne: [Łatwy sposób na ukrycie paska systemu w systemie Android ICS] (http://stackoverflow.com/questions/10445157/easy-way-to- ukryj system-bar-na-android-ics) – jprofitt

Odpowiedz

19

Spróbuj

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

Od oficjalnej doc

Flaga SYSTEM_UI_FLAG_LOW_PROFILE zastępuje flagę STATUS_BAR_HIDDEN . Po ustawieniu ta flaga włącza tryb "niskoprofilowy" dla paska lub paska nawigacyjnego systemu, Przyciski nawigacji są przyciemnione, a inne elementy ukrywają się w pasku systemu, co jest przydatne do tworzenia wciągających gier bez przeszkadzania w nawigacji systemowej. przyciski.

SYSTEM_UI_FLAG_VISIBLE flaga zastępuje flagę STATUS_BAR_VISIBLE zażądać pasek systemowy lub pasek nawigacyjny widoczny.

SYSTEM_UI_FLAG_HIDE_NAVIGATION jest nowa flaga, która żąda pasek nawigacji ukryć całkowicie. Należy pamiętać, że to działa tylko dla paska nawigacyjnego używanego przez niektóre han dsets (nie ukrywa paska systemu na tabletach). Pasek nawigacji wraca do widoku, gdy tylko system odbiera dane wprowadzone przez użytkownika. Jako taki, tryb ten jest przydatny przede wszystkim do odtwarzania wideo lub innych przypadków, w których potrzebny jest cały ekran, ale dane wejściowe użytkownika nie są wymagane.

Zachowanie paska nawigacyjnego jest zależne od aplikacji IIRC, więc powinno być wyświetlane ponownie po opuszczeniu aplikacji przez użytkownika.

+1

Dzięki! Powyższy kod ukrywa pasek zgodnie z oczekiwaniami. Jednak po dotknięciu ekranu aktywnej aplikacji pasek pojawi się ponownie. Jak mogę ukryć pasek na pozostałą część cyklu życia aplikacji? – ohho

+0

Za każdym razem, gdy użytkownik wejdzie w interakcję z aplikacją, pasek nawigacji powróci, jak już widzieliście. Jest to, według oficjalnego dokumentu, celowe zachowanie.Myślę, że będziesz musiał ukryć pasek za każdym razem, gdy spodziewasz się interakcji, niestety. https://developer.android.com/reference/android/view/View.html#SYSTEM_UI_FLAG_HIDE_NAVIGATION – MarsAtomic

+2

@MarsAtomic Ponieważ poziom interfejsu API 19 jest SYSTEM_UI_FLAG_IMMERSIVE i SYSTEM_UI_FLAG_IMMERSIVE_STICKY – user457015

27

Wiem, że jest za późno, ale jest to właściwa odpowiedź, więc to, co próbujesz zrobić, nazywa się trybem immersyjnym. API dla (19)

odjazdu: https://developer.android.com/training/system-ui/immersive.html

Kod które zostały z prośbą o to:

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    if (hasFocus) { 
     getWindow().getDecorView().setSystemUiVisibility(
       View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
         | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
         | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
         | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
         | View.SYSTEM_UI_FLAG_FULLSCREEN 
         | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); 
    } 
} 
+0

Dzięki, ale stoję wydać po otwarciu klawiatury, dolne układy są przycinane. –

+0

@PraveenPandey powinieneś dodać fałszywy tag clippadding. – mhdjazmati

+2

W końcu to działa. Kod jest wszystkim, ale chodzi o to, że jest on naWindowFocusChanged. Dzięki! – Mete

Powiązane problemy