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 jakonPreviewKeyEvent, tenModifierumoż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
onPreviewKeyEventColumn( 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
onKeyEventColumn( 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.