Ukryj pasek stanu

Z tej lekcji dowiesz się, jak ukryć pasek stanu w różnych wersjach na urządzeniu z Androidem. Ukrycie paska stanu (oraz opcjonalnie paska nawigacyjnego) umożliwia wykorzystują więcej przestrzeni wyświetlania, co zapewnia użytkownikom ciekawsze wrażenia.

Ilustracja 1 przedstawia aplikację z widocznym paskiem stanu:

paski systemowe

Rysunek 1. Widoczny pasek stanu.

Ilustracja 2 przedstawia aplikację z ukrytym paskiem stanu. Pamiętaj, że pasek działań też jest ukryty. Pasek działań nie powinien być nigdy wyświetlany bez paska stanu.

paski systemowe

Rysunek 2. Ukryty pasek stanu.

Ukrywanie paska stanu w Androidzie 4.0 i starszych

Pasek stanu można ukryć w Androidzie 4.0 (poziom interfejsu API 14) i starszych, ustawiając WindowManager flag. Możesz to zrobić automatycznie lub za pomocą: przez ustawienie motywu aktywności w pliku manifestu aplikacji. Ustawianie motywu aktywności w aplikacji Plik manifestu jest preferowanym podejściem, jeśli pasek stanu powinien zawsze pozostawać ukryte w aplikacji (choć szczerze mówiąc, możesz automatycznie zastąpić motyw). Na przykład:

<application
    ...
    android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
    ...
</application>

Zalety używania motywu aktywności:

  • Jest łatwiejszy w utrzymaniu i jest mniej podatny na błędy niż automatyczne ustawianie flagi.
  • Płynnie przechodzą one interfejs, ponieważ system ma dostęp do potrzebnych informacji. , aby wyrenderować interfejs przed utworzeniem wystąpienia głównej aktywności aplikacji.

Możesz też automatycznie ustawić flagi WindowManager. Ułatwia to ukrywanie i wyświetlanie paska stanu podczas interakcji użytkownika aplikacji:

Kotlin

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN)
        }
        setContentView(R.layout.activity_main)
    }
    ...
}

Java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        setContentView(R.layout.activity_main);
    }
    ...
}

Gdy ustawisz flagi WindowManager (np. w ramach motywu aktywności lub automatycznie), flagi pozostają aktywne, chyba że aplikacja je usunie.

Za pomocą FLAG_LAYOUT_IN_SCREEN aby ustawić układ aktywności tak, by korzystał z tego samego obszaru ekranu, który jest dostępny po włączeniu FLAG_FULLSCREEN Zapobiega to gdy pasek stanu jest ukrywany i widoczny.

Ukrywanie paska stanu na Androidzie 4.1 i nowszych

Pasek stanu można ukryć na Androidzie 4.1 (poziom interfejsu API 16) lub nowszym przez za pomocą funkcji setSystemUiVisibility(). setSystemUiVisibility() ustawia flagi interfejsu na poziom widoku indywidualnego, te ustawienia są agregowane na poziomie okna. Zastosowanie setSystemUiVisibility(), aby ustawić flagi UI daje bardziej precyzyjną kontrolę nad słupkami systemowymi niż WindowManager. Ten fragment kodu ukrywa pasek stanu:

Kotlin

// Hide the status bar.
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
actionBar?.hide()

Java

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();

Uwaga:

  • Po usunięciu flag interfejsu (np. po zamknięciu aktywność), aplikacja musi je zresetować, aby ponownie ukryć paski. Informacje znajdziesz w sekcji Reagowanie na zmiany widoczności interfejsu. jak nasłuchiwać zmian widoczności interfejsu, aby aplikacja mogła odpowiednio zareagować.
  • Miejsce, w którym ustawiasz flagi interfejsu, ma znaczenie. Jeśli ukryjesz paski systemowe w sekcji aktywności onCreate(), a użytkownik naciśnie przycisk Home, paski systemowe będą które pojawiają się ponownie. Gdy użytkownik ponownie otworzy aktywność, onCreate() nie zostanie wywołany, więc paski systemowe są nadal widoczne. Jeśli chcesz, aby interfejs systemu zmieniał się na pozostają aktywne, gdy użytkownik przechodzi do Twojej aktywności i z niej, ustaw flagi UI w onResume() lub onWindowFocusChanged().
  • Metoda setSystemUiVisibility() ma zastosowanie tylko wtedy, gdy widok, z którego je wywołujesz, jest widoczny.
  • Opuszczenie widoku powoduje pojawienie się flag ustaw z: setSystemUiVisibility() do wyczyszczenia.

Wyświetlanie treści za paskiem stanu

W Androidzie 4.1 i nowszych możesz skonfigurować treści aplikacji tak, by były widoczne za paska stanu, dzięki czemu zawartość nie będzie zmieniać rozmiaru, w miarę jak pasek stanu jest ukrywany i wyświetlany. W tym celu użyj SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN Może być też konieczne użycie SYSTEM_UI_FLAG_LAYOUT_STABLE, aby pomóc aplikacji utrzymać stabilny układ.

W takim przypadku Twoim obowiązkiem jest zadbanie o to, aby kluczowe elementy interfejsu aplikacji (np. wbudowane elementy sterujące aplikacji Mapy) nie działają przez słupki systemowe. Może to uniemożliwić korzystanie z aplikacji. W większości przypadków by to zrobić, dodając do pliku układu XML atrybut android:fitsSystemWindows z wartością true Dostosowuje dopełnienie nadrzędnego elementu ViewGroup aby zostawić miejsce na okna systemowe. To wystarczy w większości aplikacji.

W niektórych przypadkach trzeba jednak zmienić domyślne dopełnienie, aby uzyskać układ graficzny Twojej aplikacji. Aby bezpośrednio manipulować układa treści względem pasków systemowych (zajmujących przestrzeń znaną jako „wstawienia treści”), zastąp ustawienie fitSystemWindows(Rect insets). Metoda fitSystemWindows() jest wywoływana przez hierarchię wyświetlania, gdy wstawki zawartości okna uległy zmianie, aby umożliwić odpowiednio dostosować jej zawartość. Zastępując tę metodę, możesz obsługiwać (a tym samym układ aplikacji).