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

Ikona oceny 4 gwiazdek

Optymalizacja pod kątem dużych ekranów obejmuje możliwość obsługi danych wejściowych z zewnętrznej klawiatury, 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 łączą się z klawiaturami zewnętrznymi, 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. podczas odtwarzania wideo pełnoekranowego), reaguj na zdarzenia naciśnięcia klawiszy na poziomie ekranu w Jetpack Compose.

Sprawdzone metody

Za każdym razem, 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 dla spacji.
  • onPreviewKeyEvent: Modifier, który umożliwia komponentowi przechwytywanie zdarzeń klawiszy sprzętowych, gdy on (lub jeden 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 jeden z jego elementów podrzędnych) jest zaznaczony.

Kroki

Aby reagować na naciśnięcia klawiszy klawiatury w Jetpack Compose, aplikacja musi nasłuchiwać zdarzeń naciśnięcia klawiszy, 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 zdarzenie jest wysyłane, jeśli modyfikator go nie wykorzystuje:

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

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

Wewnątrz funkcji lambda modyfikatora onPreviewKeyEvent lub onKeyEvent odfiltruj zdarzenia klawiszy, w których zwolnienie klawisza (KeyEventType.KeyUp) odpowiada spacji (Key.Spacebar).

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

  • Opcja A. Korzystanie z 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ęcie spacji, aby wstrzymać i wznowić odtwarzanie filmu lub innych multimediów.

Dodatkowe materiały

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