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