Wstrzymywanie i wznawianie odtwarzania multimediów za pomocą spacji na klawiaturze

Ikona oceny czterech gwiazdek

Optymalizacja pod kątem dużych ekranów obejmuje m.in. obsługę danych wejściowych z klawiatury zewnętrznej, np. reagowanie na naciśnięcie spacji w celu wstrzymania lub wznowienia odtwarzania filmów i innych multimediów. Jest to szczególnie przydatne w przypadku tabletów, które często są podłączane do klawiatur zewnętrznych, oraz Chromebooków, które zwykle są wyposażone w klawiatury zewnętrzne, ale mogą być używane w trybie tabletu.

Gdy multimedia są jedynym elementem okna (np. odtwarzanie filmu na pełnym ekranie), reaguj na zdarzenia naciśnięcia klawisza na poziomie ekranu w Jetpack Compose.

Sprawdzone metody

Gdy aplikacja odtwarza plik multimedialny, użytkownicy powinni mieć możliwość wstrzymania i wznowienia odtwarzania przez naciśnięcie spacji na klawiaturze fizycznej.

Składniki

  • KEYCODE_SPACE: stała kodu klawisza spacji.
  • onPreviewKeyEvent: Modifier, który umożliwia komponentowi przechwytywanie zdarzeń klawiszy sprzętowych, gdy on (lub jedno z jego elementów podrzędnych) jest zaznaczony.
  • onKeyEvent: podobnie jak onPreviewKeyEvent, ten Modifier umożliwia komponentowi przechwytywanie zdarzeń klawiszy sprzętowych, gdy on (lub jedno z jego elementów podrzędnych) jest zaznaczony.

Kroki

Aby reagować na naciśnięcia klawiszy w Jetpack Compose, aplikacja musi nasłuchiwać zdarzeń naciśnięcia klawisza, filtrować je i reagować na wybrane naciśnięcia, np. naciśnięcie spacji.

1. Nasłuchiwanie zdarzeń klawiatury

W Jetpack Compose możesz użyć modyfikatora onPreviewKeyEvent lub onKeyEvent w komponencie, który zarządza naciśnięciem klawisza.

Główna różnica między tymi 2 modyfikatorami polega na tym, gdzie jest wysyłane zdarzenie, jeśli modyfikator go nie zużywa:

  • onPreviewKeyEvent – wysyła zdarzenie do pierwszego elementu podrzędnego.
  • onKeyEvent – wysyła zdarzenie do elementu nadrzędnego.

2. Filtrowanie i obsługa naciśnięć spacji

W lambdzie modyfikatora onPreviewKeyEvent lub onKeyEvent filtruj zdarzenia klawiszy, w których zwolnienie klawisza (KeyEventType.KeyUp) odpowiada spacji (Key.Spacebar).

Zwróć wartość true, jeśli kod obsługuje zdarzenie i nie chcesz, aby było ono dalej propagowane. Zwróć wartość false, aby umożliwić innym komponentom obsługę zdarzenia.

  • Opcja A: użycie onPreviewKeyEvent

    Column(
        modifier = Modifier.onPreviewKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

  • Opcja B: użycie onKeyEvent

    Column(
        modifier = Modifier.onKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

Wyniki

Aplikacja może teraz reagować na naciśnięcia spacji, aby wstrzymywać i wznawiać odtwarzanie filmów lub innych multimediów.

Dodatkowe materiały

Więcej informacji o zdarzeniach klawiatury i zarządzaniu nimi znajdziesz w artykule Obsługa danych wejściowych z klawiatury.