
Оптимизация для больших экранов включает в себя возможность обработки ввода с внешней клавиатуры, например, реагирование на нажатие пробела для приостановки или возобновления воспроизведения видео и других мультимедийных файлов. Это особенно полезно для планшетов, которые часто подключаются к внешним клавиатурам, и 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 , чтобы другие компоненты могли обработать событие.
Вариант A: Использование
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 }
Вариант B: Использование
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 }
Результаты
Теперь ваше приложение может реагировать на нажатия клавиши пробела для приостановки и возобновления воспроизведения видео или других медиафайлов.
Дополнительные ресурсы
Чтобы узнать больше о событиях клавиатуры и способах управления ими, см. раздел «Обработка ввода с клавиатуры» .