Оптимизация для больших экранов включает поддержку ввода с внешней клавиатуры, например реакцию на нажатие пробела для приостановки или возобновления воспроизведения видео и других медиафайлов. Это особенно полезно для планшетов, к которым часто подключают внешние клавиатуры, и устройств Chromebook, которые обычно поставляются с внешними клавиатурами, но могут использоваться в режиме планшета.
Если медиаконтент – единственный элемент окна (например, при полноэкранном просмотре видео), реагируйте на нажатия клавиш на уровне экрана в Jetpack Compose.
Рекомендации
При воспроизведении медиафайла в приложении у пользователей должна быть возможность приостанавливать и возобновлять воспроизведение нажатием клавиши Пробел на физической клавиатуре.
Ингредиенты
KEYCODE_SPACE– константа кода клавиши для пробела.onPreviewKeyEvent–Modifier, который позволяет компоненту перехватывать события аппаратных клавиш, когда он (или один из его дочерних элементов) находится в фокусе.ModifieronKeyEvent, как иonPreviewKeyEvent, позволяет компоненту перехватывать события аппаратных клавиш, когда он или один из его дочерних элементов находится в фокусе.
Шаги
Чтобы реагировать на нажатия клавиш клавиатуры в Jetpack Compose, ваше приложение должно прослушивать события нажатия клавиш, фильтровать события и реагировать на выбранные нажатия клавиш, например нажатие клавиши пробела.
1. Отслеживание событий клавиатуры
В Jetpack Compose можно использовать модификатор onPreviewKeyEvent или onKeyEvent в компоненте, который управляет нажатием клавиш.
Основное различие между двумя модификаторами заключается в том, куда отправляется событие, если модификатор его не использует:
onPreviewKeyEvent– отправляет событие первому дочернему элементу.onKeyEvent– отправляет событие родительскому элементу composable-функции.
2. Фильтрация и обработка нажатий пробела
Внутри лямбда-выражения модификатора onPreviewKeyEvent или onKeyEvent отфильтруйте события нажатия клавиш, в которых отпускание клавиши (KeyEventType.KeyUp) соответствует пробелу (Key.Spacebar).
Если ваш код обрабатывает событие и вы не хотите, чтобы оно распространялось дальше, возвращайте true. Возвращает false, чтобы другие компоненты могли обработать событие.
Вариант А. Использование
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 }
Вариант Б. С помощью
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 }
Результаты
Теперь ваше приложение может реагировать на нажатия клавиши пробела, чтобы приостанавливать и возобновлять воспроизведение видео или других медиафайлов.
Дополнительные ресурсы
Подробнее о событиях клавиатуры и управлении ими рассказывается в статье Обработка ввода с клавиатуры.